我想知道这个问题已经有一段时间了,我希望这不是一个愚蠢的问题,我没有意识到一个明显的答案:为什么我不能把super()
的__init__
方法称为super()()
?我必须这样调用这个方法:super().__init__()
下面是一个示例,当我运行它时,得到了一个TypeError: 'super' object is not callable
错误(特别是在__init__
中第3行的第6行):
class My_Int(int):
def __init__(self,value,extr_data=None):
super()(value)
self.extr_data=extr_data
x=My_Int(3)
super()
不是继承了类int
,使super()(value)
与int(value)
相同吗?
此外,当从类list
继承时,为什么不能将len
函数与super()
一起使用?len()
和__len__()
不一样吗?
class My_List(list):
def some_method1(self):
print(len(super()))
def some_method2(self):
print(super().__len__())
x=My_List((1,2,3,4))
x.some_method2()
x.some_method1()
本例打印4,然后按预期显示一个错误.以下是准确的输出:
4
Traceback (most recent call last):
File "/home/user/test.py", line 11, in <module>
x.some_method1()
File "/home/user/test.py", line 3, in some_method1
print(len(super()))
TypeError: object of type 'super' has no len()
请注意,我在拨打some_method1
之前先拨打了some_method2
(很抱歉造成混淆).
我错过了什么明显的东西吗?
- P、 谢谢你的帮助!