Python说文解字_杂谈05

Posted noah0532

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python说文解字_杂谈05相关的知识,希望对你有一定的参考价值。

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. 静态方法、类方法、对象方法(实例方法):

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

以上是关于Python说文解字_杂谈05的主要内容,如果未能解决你的问题,请参考以下文章

Python说文解字_杂谈08

Python说文解字_继承过程中的参数集合

Python说文解字_Python之多任务_01

Python说文解字_父类的继承

说文解字

英文单词之说文解字(10)你真的用对“著名”了吗?