Python的OOP不是语法糖衣,而是用动态基因重构软件工程的革命。其"鸭子类型"与"协议优先"理念,彻底解构了传统类继承的枷锁。
核心基因:动态绑定与协议优先
class Neuron:
def __init__(self, value):
self.value = value
# 运算符重载实现对象协议
def __add__(self, other):
return Neuron(self.value + other.value)
n1 = Neuron(0.6)
n2 = Neuron(0.4)
print((n1 + n2).value) # 输出1.0:对象支持原生运算
- 鸭子类型:只要实现
__add__方法即视为"可加对象" - 协议驱动:
__iter__/__next__定义可迭代对象,无需显式接口声明
继承革命:C3算法与MRO
graph LR
D[类D] --> B[类B]
D --> C[类C]
B --> A[类A]
C --> A
当调用D.method()时,Python按MRO顺序(D, B, C, A)搜索方法,避免经典菱形继承的二义性。super()基于MRO实现精准父类调用。
元编程核弹:元类与描述符
- 描述符协议(
__get__/__set__)
class Field: # ORM字段描述符
def __set__(self, instance, value):
instance.__dict__[self.name] = validate(value)
- 元类控制类创建
class Meta(type):
def __new__(cls, name, bases, attrs):
attrs['registry'] = {} # 自动注入类属性
return super().__new__(cls, name, bases, attrs)
class Model(metaclass=Meta):
pass # 所有子类自带registry字典
性能利器:__slots__内存革命
class Vector:
__slots__ = ('x', 'y') # 禁用__dict__动态字典
def __init__(self, x, y):
self.x = x
self.y = y
- 内存占用减少40%-50%
- 属性访问速度提升20%
- 代价:无法动态添加新属性
灵魂叩问:当Java/C#在类型系统中挣扎时,Python用"协议优于继承"开辟新大陆。思考:为何Django选择元类实现ORM而非装饰器?这背后隐藏着怎样的架构哲学?
1854

被折叠的 条评论
为什么被折叠?



