Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在超类的方法中设置子类的属性_Python_Oop - Fatal编程技术网

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