Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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 覆盖_uinit__;时属性不可用?_Python - Fatal编程技术网

Python 覆盖_uinit__;时属性不可用?

Python 覆盖_uinit__;时属性不可用?,python,Python,我试图覆盖\uuu init\uu方法,但是当我调用超级方法时,在该方法中创建的属性不可用。 我可以看出这不是一个继承问题,因为class B仍然有可用的属性 我认为代码示例将更好地解释它:-) Python 2.5.2(r252:60911,2008年10月5日,19:24:49) [GCC 4.3.2]关于linux2 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>A类(对象): ... 定义初始化(self,*args,**kwargs): ... s

我试图覆盖
\uuu init\uu
方法,但是当我调用超级方法时,在该方法中创建的属性不可用。 我可以看出这不是一个继承问题,因为
class B
仍然有可用的属性

我认为代码示例将更好地解释它:-)

Python 2.5.2(r252:60911,2008年10月5日,19:24:49) [GCC 4.3.2]关于linux2 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>A类(对象): ... 定义初始化(self,*args,**kwargs): ... self.args=args ... self.kwargs=kwargs ... >>>a=a('a','b',key='value') >>>打印a.args、a.kwargs ('a','b'){'key':'value'} >>>B(A)类: ... 通过 ... >>>b=b('b','c',key_b='value_b') >>>打印b.args,b.kwargs ('b','c'){'key_b':'value_b'} >>>C(A)类: ... 定义初始化(self,*args,**kwargs): ... 打印“C类” ... super(A,self)。\uuuuu初始值(*args,**kwargs) ... >>>c=c('c','d',键c='值c') C类 >>>打印c.args、c.kwargs 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 AttributeError:“C”对象没有属性“args” >>>D(A)类: ... 定义初始化(self,*args,**kwargs): ... super(A,self)。\uuuuu初始值(*args,**kwargs) ... 打印 ... >>>d=d('d','e',键d='值d') D >>>打印d.args,d.kwargs 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 AttributeError:'D'对象没有属性'args' >>>
对超类的调用需要使用它自己的类型

super(D, self).__init__(*args,**kwargs)
而不是

super(A...
我相信调用
super(A,self)。\uuuu init\uuu
将调用
A
的超类,即
object
。相反,您希望调用
D
的超类,即
A

错误地使用了super()。在“C”类中,init()方法的第二行应该将C作为第一个参数传递,如下所示

super(C, self).__init__(*args, **kwargs)
实际上,你甚至不需要在这里使用super。你可以打个电话

A.__init__(self, *args, **kwargs)
A.__init__(self, *args, **kwargs)