正在 Python 中的基础 class 中初始化公共属性
Initializing common attributes in the base class in Python
我有以下抽象 classes 的情况 - 有一个基础 class A 并且,比如说,继承 classes B 和 C。B 和 C 有一些属性以他们自己的方式初始化,但是,有些属性对于所有继承的 classes 应该具有相同的初始值。有什么方法可以在基础 class 中初始化它们,而无需在每个继承的 class 初始化中复制代码?
这是我第一次在 Python 中使用抽象 classes,在互联网上搜索了几天后,我仍然找不到合适的解决方案。
示例:
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
您可以在 class A 的 __init__
方法中初始化值并调用 B 中的 super
内置函数 class:
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
我有以下抽象 classes 的情况 - 有一个基础 class A 并且,比如说,继承 classes B 和 C。B 和 C 有一些属性以他们自己的方式初始化,但是,有些属性对于所有继承的 classes 应该具有相同的初始值。有什么方法可以在基础 class 中初始化它们,而无需在每个继承的 class 初始化中复制代码? 这是我第一次在 Python 中使用抽象 classes,在互联网上搜索了几天后,我仍然找不到合适的解决方案。
示例:
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
您可以在 class A 的 __init__
方法中初始化值并调用 B 中的 super
内置函数 class:
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