Python init值没有用super()继承到另一个类
我建了两个班。第一个类具有自己的init值,另一个类将从第一个类继承init值。我想知道我是否正确理解super()的用法 我认为我的代码应该是由“tester”打印的,因为我用name和c初始化了测试类。因为测试类继承自测试_2,所以我们可以只打印名称。我是不是弄糊涂了 我的期望是: 测试_2将从测试中获取值,我们可以在测试中打印测试_2的值。简化它:Python init值没有用super()继承到另一个类,python,super,Python,Super,我建了两个班。第一个类具有自己的init值,另一个类将从第一个类继承init值。我想知道我是否正确理解super()的用法 我认为我的代码应该是由“tester”打印的,因为我用name和c初始化了测试类。因为测试类继承自测试_2,所以我们可以只打印名称。我是不是弄糊涂了 我的期望是: 测试_2将从测试中获取值,我们可以在测试中打印测试_2的值。简化它: class A: def __init__(self, name, c): self.name = name
class A:
def __init__(self, name, c):
self.name = name
self.c = c
class B(A):
def check(self):
print(self.name)
tt = B("tester", "check")
tt.check()
B
对象将具有与A
对象相同的所有内容,因为它继承了这些内容。如果B
没有任何有用的功能,则无需在上实现\uuuuu init\uuuu
。您可以直接访问self.name
,就像在A
中一样。具有该属性的对象是self
。它设置为self
,您可以使用self
访问它
记住,self
是对象实例,而不是类。当执行B(…)
时,A中的self
。\uuuu init\uuuuu(self…)
实际上是B
的一个实例
如果要重写父方法,只需显式使用super
,如:
def __init__(self, name, c):
super().__init__(name, c)
这里的\uuuu init\uuuu
被覆盖,为了执行父级的\uuuu init\uuuu
,您需要通过超级访问它。只需self.\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuu(name,c)
就可以访问孩子的\uuuuuuuu init\uuuuuuuuuuuuuuuuuu
方法,并且您可以在一个无休止的递归循环中调用它。您不需要使用super
来访问实例变量。您应该能够在测试中使用self.name
。您还需要以另一种方式定义类。由于测试。\uuu init\uuu
本身没有任何功能,您可以完全忽略它。非常感谢。我太痴迷于使用超级方法了,把我的知识搞砸了。顺便问一下,你知道super()是如何工作的吗
def __init__(self, name, c):
super().__init__(name, c)