Python Title

Posted by Qiyibaba on July 11, 2022
class P:
    i = 1
    j = 1
    k = 1

    def __init__(self) -> None:
        self.i = 3
        self.j = 4

    def info(self):
        print(self.i,self.j)


class Man(P):
    @classmethod
    def info(cls):
        cls.i +=2
        cls.j +=2
        print(cls.i,cls.j)


class Woman(P):
    def info(cls):
        cls.i +=2
        cls.j +=2
        print(cls.i,cls.j)

john = Man()
john.info()
susan = Woman()
susan.info()
结果:
3 3
5 6

why?
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
所以如果添加了@classmethod方法,则不会调用父类的构造函数,直接读取了静态变量。

如果实例化了对象,那么子类继承父类,如果子类不复写父类的init()方法,创建子类对象的时候自动调用父类init()方法
子类继承父类,如果子类复写了父类的init()方法,创建子类对象的时候不会自动调用父类init()方法
注意:Python要求复写父类的init()方法时,要调用父类的init()。因为存在隐患,例如父类的初始化方法有参数,子类初始化无参数,子类在调用父类的参数的时候就会报错
def divide(a,b):
    try:
        return a/b
    except:
        return "0"
    finally:
        return "-1"

print(divide(3,1),divide(2,0))
不论try
语句块中发生了什么异常,finally
语句块中的代码都会被执行。所以我们通常在finally
语句块中做清理工作,例如关闭文件等等。

try和except中return语句设定的返回值,可以在finally块中被修改;
实践中不要在finally中使用return,这是一种不好的代码,容易让人产生疑惑。finally块主要用于进行清理工作。
集合的计算:
1.交集

In [1]: a = {1,2,3,4}

In [2]: b = {3,4,5,6}

In [3]: a & b
Out[3]: {3, 4}

In [4]: a.intersection(b)
Out[4]: {3, 4}

2.并集

In [5]: a | b
Out[5]: {1, 2, 3, 4, 5, 6}

In [6]: a.union(b)
Out[6]: {1, 2, 3, 4, 5, 6}
3.差集

In [9]: a-b
Out[9]: {1, 2}

In [10]: b-a
Out[10]: {5, 6}

In [11]: a.difference(b)
Out[11]: {1, 2}

In [12]: b.difference(a)
Out[12]: {5, 6}
4.对称差集

In [13]: a^b
Out[13]: {1, 2, 5, 6}

In [14]: a.symmetric_difference(b)
Out[14]: {1, 2, 5, 6}
5.集合的子集和超集

In [15]: x = {1,2,3,4}

In [16]: y = {1,2,3}

In [17]: y.issubset(x)
Out[17]: True

In [18]: x.issuperset(y)
Out[18]: True
①节点:包含一个数据元素及若干指向子树分支的信息 [5]  。
②节点的度:一个节点拥有子树的数目称为节点的度 [5]  。
③叶子节点:也称为终端节点,没有子树的节点或者度为零的节点 [5]  。
④分支节点:也称为非终端节点,度不为零的节点称为非终端节点 [5]  。
⑤树的度:树中所有节点的度的最大值 [5]  。
⑥节点的层次:从根节点开始,假设根节点为第1层,根节点的子节点为第2层,依此类推,如果某一个节点位于第L层,则其子节点位于第L+1层 [5]  。
⑦树的深度:也称为树的高度,树中所有节点的层次最大值称为树的深度 [5]  。
⑧有序树:如果树中各棵子树的次序是有先后次序,则称该树为有序树 [5]  。
⑨无序树:如果树中各棵子树的次序没有先后次序,则称该树为无序树 [5]  。
⑩森林:由m(m≥0)棵互不相交的树构成一片森林。如果把一棵非空的树的根节点删除,则该树就变成了一片森林,森林中的树由原来根节点的各棵子树构成 [5]  


二叉树是一个结点的集合,其中每个结点最多与两个后继结点相关联,分别称为左侧子结点和右侧子结点。二叉树中的每个结点并不是全都有两个子结点,也可能只有一个结点或两个结点都可能被省略。在二叉树中,没有子结点的结点称为叶结点。

包含子结点的结点称为其子结点的父结点。对于一个定义为二叉树的非空的结点集合,每个结点必须至多有一个父结点,并且必须有一个结点是没有父结点的。这个没有父结点的结点称为二叉树的根结点。一个空的结点集合可以构成一个空的二叉树。

链表和二叉树有一些相似之处。二叉树的根对应于链表的头部,二叉树结点的子结点对应于链表中的后继结点,二叉树结点的父结点对应于链表中结点的前驱结点。当然,空链表的模拟是空的二叉树。