Python 初学者关于 super 一问 ( Python 2.7)

2015-02-09 16:43:59 +08:00
 invite

class A(object):
def init( self , name ):
super(object, self).init()
self.name = name

class B(A):
def init( self , name , birth ):
super(A , self).init( name )
self.birth = birth

我实例化A的时候,没有报错。
但是实例化B的时候,却报错: TypeError: object.init() takes no parameters
难道B里面的super方法,直接去调用object的?绕过A了?

网上搜了什么MRO啥的,但也想不通为什么这里会直接去object了。

还是我这个写法有问题?

4570 次点击
所在节点    Python
6 条回复
zhyu
2015-02-09 16:55:35 +08:00
super 用法错了,class A 里应该是 super(A, self).__init__(),class B 依此类推
Cynic222
2015-02-09 16:58:41 +08:00
super(A , self).init( name ) 你要的是A的父类。。。
invite
2015-02-09 17:01:23 +08:00
@Cynic222 啊,好像是搞错了。
zerh925
2015-02-09 17:31:53 +08:00
class A(object):
def __init__(self, name):
super(A, self).__init__()
self.name = name
zerh925
2015-02-09 17:33:21 +08:00
回复不支持markdown吗?
hahastudio
2015-02-09 17:44:56 +08:00
super() 之所以 super 是因为通常你不需要知道 一个类的父类是哪些
https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/169584

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX