我发现当__init__
方法缺少self
参数时,只有在没有此类的实例化时,编译器才会抱怨:
$ cat test.py
#!/usr/bin/python
class A():
def __init__():
print("A()")
$ ./test.py
但如果有实例化,则会发生运行时错误:
$ cat test.py
#!/usr/bin/python
class A():
def __init__():
print("A()")
A()
$ ./test.py
Traceback (most recent call last):
File "./test.py", line 6, in <module>
A()
TypeError: __init__() takes 0 positional arguments but 1 was given
根据我的理解,__init__()
似乎没有用,因为它无法创建任何实例。那么为什么Python编译器不强制执行限制,例如self
函数中没有__init__
参数时,它会显示错误消息?这合理吗?或者我想念一些东西。
答案 0 :(得分:0)
__init__
在编译时不是特殊名称。
通过尝试构造A.__init__
,可以使用符号A
执行除调用之外的操作,并且我认为可以将不可用的__init__
函数替换为在尝试构造A
之前,运行时的不同函数。
在调用__init__
时会检查正确数量的参数,因为它适用于任何其他方法。
答案 1 :(得分:0)
#!/usr/bin/python
class A(object):
def __init__(self):
print("A()")
A()
答案 2 :(得分:0)
__init__
是已经创建的类实例的初始化,因此它需要self,就像所有其他类方法一样。如果要处理类的创建,那就是__new__
方法。 This seems like一个很好的描述。
不要让python不会抱怨这个事实,除非这个方法被称为迷惑你。