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 に答える