python3使用抽象基类继承属性

时间:2015-08-31 18:07:32

标签: python

我正在尝试使用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中获取v1v2的值。但是,我想要使用摘要类v1中的A值,并覆盖变量v2的值。如果我尝试拨打super.__init__(self),则会出错。有人可以让我知道实现这个目标的方法吗?谢谢。

更新:使用上面的示例代码收到以下错误消息: AttributeError: 'B' object has no attribute 'v1'

2 个答案:

答案 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)