在 python (v3.6.1) 中,我希望编写一个这样的类:
class SecondClass(FirstClass):
property = "custom"
print(SecondClass.name) #=> "john"
class SecondClass(FirstClass):
property = "notcustom"
print(SecondClass.name) #=> "steve"
我尝试像这样设置 FirstClass
类:
class FirstClass:
if property == "custom":
name = "john"
else:
name = "steve"
但我似乎无法从 SecondClass 编辑 FirstClass
的属性。
这可能吗?
最佳答案
由于您使用的是 Python 3.6,因此您可以使用新的 __init_subclass__
来完成您的要求。方法。来自 __init_subclass__
的文档:
This method is called whenever the containing class is subclassed. cls is then the new subclass. If defined as a normal instance method, this method is implicitly converted to a class method.
class FirstClass:
def __init_subclass__(cls):
super().__init_subclass__()
if cls.property == "custom":
cls.name = "john"
else:
cls.name = "steve"
class SecondClass(FirstClass):
property = "custom"
print(SecondClass.name)
class SecondClass(FirstClass):
property = "notcustom"
print(SecondClass.name)
对于适用于 Python 3.5 及更低版本的方法,您可以使用一些元类魔法:
class FirstClass(type):
def __init__(cls, name, bases, attrs):
if cls.property == "custom":
cls.name = "john"
else:
cls.name = "steve"
super(FirstClass, cls).__init__(name, bases, attrs)
class SecondClass(metaclass=FirstClass):
property = "custom"
print(SecondClass.name)
class SecondClass(metaclass=FirstClass):
property = "notcustom"
print(SecondClass.name)
关于Python:从子类更改父类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45716412/