[英]python3 use of abstract base class for inheriting attributes
我试图使用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)
如果我没有在class B
定义__init__
,它将仅从超类A中获取v1
和v2
的值。但是,我想使用抽象类A
的v1
的值并覆盖变量v2
的值。 如果我尝试调用super.__init__(self)
,则会出现错误。 有人可以让我知道实现此目标的方法吗? 谢谢。
更新:使用上面的示例代码得到了以下错误消息: AttributeError: 'B' object has no attribute 'v1'
您应该使用super().__init__()
而不是super.__init__(self)
。
这应该工作。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.