让__init__成员必须采用自我参数是否合理?

时间:2017-08-29 02:46:37

标签: python

我发现当__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__参数时,它会显示错误消息?这合理吗?或者我想念一些东西。

3 个答案:

答案 0 :(得分:0)

__init__编译时不是特殊名称。

通过尝试构造A.__init__,可以使用符号A执行除调用之外的操作,并且我认为可以将不可用的__init__函数替换为在尝试构造A之前,运行时的不同函数。

在调用__init__时会检查正确数量的参数,因为它适用于任何其他方法。

答案 1 :(得分:0)

至少它必须是一个论点,我们称之为&#34; self&#34;通常,所以你的Python代码可能会有一个小的改变

#!/usr/bin/python
class A(object):
    def __init__(self):
        print("A()")

A()

答案 2 :(得分:0)

__init__是已经创建的类实例的初始化,因此它需要self,就像所有其他类方法一样。如果要处理类的创建,那就是__new__方法。 This seems like一个很好的描述。

不要让python不会抱怨这个事实,除非这个方法被称为迷惑你。