首页 > 解决方案 > 在 Python 中初始化基类中的公共属性

问题描述

我有以下抽象类的情况-有一个基类A,例如继承类B和C。B和C有一些以自己的方式初始化的属性,但是,有些属性的初始值应该相同对于所有继承的类。有没有办法在基类中初始化它们而不在每个继承的类初始化中复制代码?这是我第一次在 Python 中使用抽象类,在互联网上挖掘了几天后,我仍然找不到合适的解决方案。

例子:

class A(metaclass=ABCMeta):
    @abstract_attribute
    def name(self):
        pass

# Value should be set as 0 initially for all the classes
#Should it be written in the base __init__ somehow?
    @abstract_attribute
    def value(self):
        return 0

class B(A):
    def __init__(self):
        self.name = "class B"
        self.value = 0    # this is the duplicating line

class C(A):
    def __init__(self):
        self.name = "class C"
        self.value = 0    # this is the duplicating line

标签: pythoninitializationabstract-classabc

解决方案


您可以在__init__A 类的方法中初始化值并在 B 类中调用super内置函数:

class A():
    def __init__(self):
        self.value = 1
        
    def name(self):
        pass

class B(A):
    def __init__(self):
        super().__init__()
        self.name = "class B"

b = B()
print(b.value)

打印:

1

推荐阅读