1. isinstance和type:
is和==符号,is指的是内存地址,是不是一个对象,ID知否相同
集成链
class A: pass class B(A): pass b = B() print(isinstance(b,B)) print(isinstance(b,A)) print(type(b) is B) print(id(type(b)),id(B)) # 2943616512536 2943616512536
2. 类变量和对象变量:
类中的self == 实例,其实就等于a = A()的a,等于传递进去,这就是为什么类中有self的原因。
class A: aa = 1 def __init__(self,x,y): self.x = x self.y = y a = A(2,3) A.aa = 11 a.aa = 100 print(a.x,a.y,a.aa) # 2 3 1 print(A.aa) # print(A.x,A.y) # 抛异常 # 2 3 100 # 11
记住:查找的顺序是由下而上进行查找
记住:类变量只能通过类来更改,如果通过实例去更改,只会开辟一块儿新的变量,类的变量其实不能更改,但是看起来是一个变量。类的变量是所有成员共享的。
3. 类属性和实例属性的查找顺序:
定义在内部的实例或者方法。
查找分深度查找和广度查找,其实前面有类名.__init__这样继承父类的方式就是深度查找,我们Py3用的是MRO算法,用的是C3,super()就是一种C3的查找方法。
class A: name = "A" def __init__(self): self.name = "obj" a = A() print(a.name) # 会打印obj回不到name变量
class D: pass class C(D): pass class B(D): pass class A(B,C): pass print(A.__mro__) # (<class ‘__main__.A‘>, <class ‘__main__.B‘>, <class ‘__main__.C‘>, <class ‘__main__.D‘>, <class ‘object‘>)
记住:可以用__MRO__查看继承链的关系。
记住:py2,必须要写object才有object,py3.不用写也会继承object,是一种新式类
4. 静态方法、类方法、对象方法(实例方法):
原文地址:https://www.cnblogs.com/noah0532/p/10987522.html
时间: 2024-11-07 14:19:13