python 子类如何继承父类的属性

how does a subclass inherits a parent's attributes in python

据我所知,在 OO 中,子类继承其父类的所有属性。但是在 python 中,子类不会继承父类的属性,直到它以这种方式调用父类的 init 方法: 超级().初始化() . 我想知道我的推论是否正确?为什么会这样?我猜它是其他语言,例如 java 子类会自动继承其父类的所有属性,因此无需执行此类操作。 提前谢谢你。

当您在子class 中调用super().__init__() 时,您只是在执行parents init 方法和该方法中的所有内容。

child class 将继承属性和所有方法,而无需调用 super().__init__() 函数。但是,如果您在 child class 中定义了一个 init 函数,那么它将覆盖在 child [=46] 中复制的 parents class init 方法=].您必须记住,当 child class 继承 parent class 时,它实际上使 child class 成为parentclass,可以添加到and/or改动而不影响parentclass。您可以通过不覆盖来选择您希望 child class 从 parent 继承的那些东西,并且您可以选择您不想继承的那些东西覆盖它们。

示例 1

class parentclass:
        b = 31

        def __init__(self):
                self.a = 21
        def add(self, a, b):
                c = a+b
                print(c)


class childclass(parentclass):
        pass

child1 = childclass()

child1.add(10,20)
print(child1.b)
print(child1.a)

输出:

30
31
21

示例 2:


class parentclass:
        b = 31

        def __init__(self):
                self.a = 21
        def add(self, a, b):
                c = a+b
                print(c)


class childclass(parentclass):
        def __init__(self):
                self.name="child"

child1 = childclass()

child1.add(10,20)
print(child1.b)
print(child1.a)

输出:

Traceback (most recent call last):
  File "C:/Users/chees/PycharmProjects/untitled/idk.py", line 20, in <module>
    print(child1.a)
AttributeError: 'childclass' object has no attribute 'a'
30
31

编辑:

这就是为什么在 child 的 init 方法中需要 super().init() 方法,以便复制 parents init 方法再次在 childs init 方法中,即:


class parentclass:
        b = 31

        def __init__(self):
                self.a = 21
        def add(self, a, b):
                c = a+b
                print(c)


class childclass(parentclass):


        def __init__(self):
                super().__init__()
                self.name="child"

child1 = childclass()

child1.add(10,20)
print(child1.b)
print(child1.a)

相同
class parentclass:
        b = 31

        def __init__(self):
                self.a = 21
        def add(self, a, b):
                c = a+b
                print(c)


class childclass(parentclass):


        def __init__(self):
                self.a = 21
                self.name="child"

child1 = childclass()

child1.add(10,20)
print(child1.b)
print(child1.a)