Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python init值没有用super()继承到另一个类_Python_Super - Fatal编程技术网

Python init值没有用super()继承到另一个类

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

我建了两个班。第一个类具有自己的init值,另一个类将从第一个类继承init值。我想知道我是否正确理解super()的用法

我认为我的代码应该是由“tester”打印的,因为我用name和c初始化了测试类。因为测试类继承自测试_2,所以我们可以只打印名称。我是不是弄糊涂了

我的期望是:

测试_2将从测试中获取值,我们可以在测试中打印测试_2的值。

简化它:

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)