如何覆盖父类?

时间:2019-05-31 10:16:13

标签: python python-3.x class oop

我有两节课:

class Parent(object):
    def __init__(self):
        self.a = 0
        self.b = self.a + 1

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.a = 1

print(Child().b)

输出为10+1),但我希望有21+1)。如何获得这样的结果?

2 个答案:

答案 0 :(得分:0)

如果未提供参数,则可以在父类中使用key word argument来设置a的值:

class Parent(object):
    def __init__(self, a=None):
        if a is None:
            self.a = 0
        self.b = self.a + 1

class Child(Parent):
    def __init__(self):
        self.a = 1
        super().__init__(self.a)

parent = Parent()
child = Child()
print(parent.a, parent.b) 
print(child.a, child.b)

输出:

0 1
1 2

另一种方法可以使用类变量

class Parent(object):
    a = 0
    def __init__(self):
        self.a = self.__class__.a
        self.b = self.a + 1

class Child(Parent):
    a = 1
    def __init__(self):
        super().__init__()

parent = Parent()
child = Child()
print(parent.a, parent.b) 
print(child.a, child.b)

输出:

0 1
1 2

在上面,使用类变量,您完全可以在子类中没有__init__方法:(这可能或可能不适用于您的实际用例)

class Parent(object):
    a = 0
    def __init__(self):
        self.a = self.__class__.a
        self.b = self.a + 1

class Child(Parent):
    a = 1

答案 1 :(得分:-1)

a之外分配Parent.__init__属性:

class Parent(object):
    a = 0
    def __init__(self):
        self.b = self.a + 1

class Child(Parent):
    def __init__(self):
        self.a = 1
        super().__init__()

print(Child().b)