Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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_Initialization_Abstract Class_Abc - Fatal编程技术网

在Python中初始化基类中的公共属性

在Python中初始化基类中的公共属性,python,initialization,abstract-class,abc,Python,Initialization,Abstract Class,Abc,对于抽象类,我有下面的例子-有一个基类a,比如说继承类B和C。B和C有一些以自己的方式初始化的属性,但是,对于所有继承的类,有些属性的初始值应该相同。有没有办法在基类中初始化它们,而不在每个继承的类初始化中重复代码? 这是我第一次用Python处理抽象类,在互联网上挖掘了几天之后,我仍然找不到合适的解决方案 例如: class A(metaclass=ABCMeta): @abstract_attribute def name(self): pass # Val

对于抽象类,我有下面的例子-有一个基类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


您可以初始化类A的
\uuuu init\uuu
方法中的值,并调用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

您可以初始化类A的
\uuuu init\uuu
方法中的值,并调用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

是的,调用超级类初始值设定项,您通常会使用
super()。\uuuuu init\uuuuu(self,property,arguments)
@juanpa.arrivillaga谢谢,这正是我要找的!是的,调用超级类初始值设定项,您通常会使用
super()。\uuuuu init\uuuuu(self,property,arguments)
@juanpa.arrivillaga谢谢,这正是我要找的!