我对类和init函数有疑问。
我们可以不声明一个类而声明一个init函数吗?我还没有试过,只是想在这里问一下。
在你的例子中,你只是创建了一些函数,而这些函数的名字恰好与类实例方法相同。但是名称本身并没有什么特别之处。Python 只是将函数对象绑定到这个名字的变量上。
>>> def __init__(self):
... print(self)
...
创建了一个函数对象,它打印它的第一个位置参数,并将它绑定到全局变量上 "__init__"
. 类似的事情在这里
>>> def method(self):
... print(self)
...
创建了一个名为 "方法 "的函数,其位置参数名为 "self"。但是这些名字并没有什么神奇的地方。它们不是关键字,它可以很容易地被称为
>>> def i_am_not_a_method(this_is_not_self):
... print(this_is_not_self)
...
这是一个相同的功能。现在,当你尝试使用它时,
>>> method()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: method() missing 1 required positional argument: 'self'
它只是一个函数,而且没有提供必要的参数。
函数成为方法,不是因为它们的名字,而是因为它们被分配给类变量。创建一个类并分配这些函数,它们就开始表现得像方法。
>>> class Foo:
... pass
...
>>> Foo.__init__ = __init__
>>> Foo.method = method
>>> foo = Foo().method()
<__main__.Foo object at 0x7f5197defb38>
<__main__.Foo object at 0x7f5197defb38>
这两种 __init__
和 method
运转和印刷他们的 self
对象。