Python 在超类的方法中设置子类的属性
我有以下情况:Python 在超类的方法中设置子类的属性,python,oop,Python,Oop,我有以下情况: class Baseclass(object): extra_fields = [] @classmethod def extend(cls, key): cls.extra_fields.append(key) class A(Baseclass): pass class B(Baseclass): pass A.extend("foo") 现在,将调用基类的extend,将Baseclass.extra_字段设置
class Baseclass(object):
extra_fields = []
@classmethod
def extend(cls, key):
cls.extra_fields.append(key)
class A(Baseclass):
pass
class B(Baseclass):
pass
A.extend("foo")
现在,将调用基类的extend,将Baseclass.extra_字段设置为[foo]。然后,A.extra_字段将是[foo],然而B.extra_字段也将是[foo]
在extend中是否有一种方法可以只修改调用它的子类,而不在所有子类上定义extend,因为这些子类可能事先不知道?如何为每个子类定义自己的额外字段
class Baseclass(object):
@classmethod
def extend(cls, key):
cls.extra_fields.append(key)
class A(Baseclass):
extra_fields = []
class B(Baseclass):
extra_fields = []
A.extend("foo")
你也可以用一些元类魔法来实现自动化 为每个子类定义自己的额外_字段怎么样
class Baseclass(object):
@classmethod
def extend(cls, key):
cls.extra_fields.append(key)
class A(Baseclass):
extra_fields = []
class B(Baseclass):
extra_fields = []
A.extend("foo")
class Baseclass(object):
@classmethod
def extend(cls, key):
if not 'extra_fields' in cls.__dict__:
cls.extra_fields=[]
cls.extra_fields.append(key)
class A(Baseclass):
pass
class B(Baseclass):
pass
A.extend("foo")
你也可以用一些元类魔法来实现自动化
class Baseclass(object):
@classmethod
def extend(cls, key):
if not 'extra_fields' in cls.__dict__:
cls.extra_fields=[]
cls.extra_fields.append(key)
class A(Baseclass):
pass
class B(Baseclass):
pass
A.extend("foo")