码迷,mamicode.com
首页 > 编程语言 > 详细

Python说文解字_杂谈05

时间:2019-06-07 10:59:37      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:方法   init   方式   算法   bsp   instance   py3   is和==   相同   

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

标签:方法   init   方式   算法   bsp   instance   py3   is和==   相同   

原文地址:https://www.cnblogs.com/noah0532/p/10987522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!