描述符 和 property() 实现原理

  • 不理解为什么描述符是绑定在 类属性 上面。

  • 类属性最初可以激活 getter 方法,但是无法激活 setter 方法

  • 实例属性最初都可以激活 getter 和 setter

  • 当对类属性进行赋值之后,描述符就失效了。应该是赋的值覆盖了绑定符地址。

  • 一个类的多个实例,使用的描述符对象竟然是同一个???

  • 猜测应该是通过实例属性保存 描述符 实例,然后对实例访问和赋值就是对描述符进行访问赋值,会激活特殊方法 get __set__,从而通过描述符来实现对属性访问的控制。


  • property() 是如何实现方法绑定的?

Python 多继承 MRO

  • 新式类的 MRO 计算方法,以及前几代的设计缺陷。

  • super() 的原理,以及下面的代码,为什么会输出两个 B。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A:  
def __init__(self):
print("A",end=" ")
super().__init__() # 这里为什么调用的是 B 的构造方法
class B:
def __init__(self):
print("B",end=" ")
super().__init__()
class C(A,B):
def __init__(self):
print("C",end=" ")
A.__init__(self)
B.__init__(self)
print("MRO:",[x.__name__ for x in C.__mro__])
C()

别碰 多继承,会变得不幸 ……

property() 实现原理