1

我有以下情况:

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")

现在,extendofBaseclass将被调用,设置Baseclass.extra_fields["foo"]. 然后,A.extra_fields将是["foo"],然而,将是B.extra_fields

有没有办法extend只修改调用它的子类(而不定义extend所有子类,因为这些子类可能事先不知道)?

4

2 回答 2

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")
于 2013-03-25T07:18:50.673 回答
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")

(你也可以用一些元类魔法来自动化它。)

于 2013-03-25T07:02:22.863 回答