我有以下情况:
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
将被调用,将Baseclass.extra_fields
设置为["foo"]
。然后,A.extra_fields
将为["foo"]
,但B.extra_fields
也是如此。
extend
中是否只有一种方法只能修改调用它的子类(不在所有子类上定义extend
,因为这些可能事先不知道)?
答案 0 :(得分:3)
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")
答案 1 :(得分:1)
如何为每个子类定义自己的extra_fields
?
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")
(您可以使用某些元类魔法自动执行此操作。)