我编写了以下代码来解释我使用 super() 发现的内容。:
使用 Parent.set_prop():
class Parent:
parent_prop = None
@classmethod
def set_prop(cls, value):
cls.parent_prop = value
class Child1(Parent):
@classmethod
def set_prop(cls, value):
print("Child1 set parent prop")
Parent.set_prop(value)
class Child2(Parent):
pass
cls1 = Child1()
cls2 = Child2()
cls1.set_prop(10)
print(cls1.parent_prop)
print(cls2.parent_prop)
使用 super().set_prop()
class Parent:
parent_prop = None
@classmethod
def set_prop(cls, value):
cls.parent_prop = value
class Child1(Parent):
@classmethod
def set_prop(cls, value):
print("Child1 set parent prop")
super().set_prop(value)
class Child2(Parent):
pass
cls1 = Child1()
cls2 = Child2()
cls1.set_prop(10)
print(cls1.parent_prop)
print(cls2.parent_prop)
第一次执行的结果是:
Child1 set parent prop
10
10
第二次执行的结果是:
Child1 set parent prop
10
None
我没想到两者之间有任何差异。为什么用 super() 调用 set_prop 方法不会为类的所有实例设置值?