繁体   English   中英

python3使用抽象基类继承属性

[英]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中获取v1v2的值。但是,我想使用抽象类Av1的值并覆盖变量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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM