我正在尝试使用abc.ABCMeta
使用抽象基类。以下是示例代码 -
import abc
class A(metaclass=abc.ABCMeta):
def __init__(self):
self.v1 = 10
self.v2 = 10
@abc.abstractmethod
def first_method(self):
pass
class B(A):
def __init__(self):
self.v2= 20
def first_method(self):
pass
if __name__ == '__main__':
b = B()
print("v1 =%d", b.v1)
print("v2=%d", b.v2)
如果我没有在__init__
中定义class B
,那么它只会从超类A中获取v1
和v2
的值。但是,我想要使用摘要类v1
中的A
值,并覆盖变量v2
的值。如果我尝试拨打super.__init__(self)
,则会出错。有人可以让我知道实现这个目标的方法吗?谢谢。
更新:使用上面的示例代码收到以下错误消息:
AttributeError: 'B' object has no attribute 'v1'
答案 0 :(得分:4)
您应该使用super().__init__()
代替super.__init__(self)
。
答案 1 :(得分:0)
这应该有效。
import abc
class A(metaclass=abc.ABCMeta):
def __init__(self):
self.v1 = 10
self.v2 = 10
@abc.abstractmethod
def first_method(self):
pass
class B(A):
def __init__(self):
super(B, self).__init__()
self.v2 = 20
def first_method(self):
pass
if __name__ == '__main__':
b = B()
print('v1 = ', b.v1)
print('v2 = ', b.v2)