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)