在Python中没有类的情况下声明init函数

时间:2020-06-17 05:34:19

标签: python python-3.x

我对类和初始化函数有疑问。

我们可以在不声明类的情况下声明init函数吗? 我还没有尝试过,只是想在这里问。

1 个答案:

答案 0 :(得分:1)

在您的示例中,您刚刚创建的函数恰好具有与类实例方法相同的名称。但是名称本身并没有什么特别的。 Python只是将函数对象绑定到该名称的变量。

>>> def __init__(self):
...     print(self)
... 

创建了一个函数对象,该函数打印其第一个位置参数并将其绑定到全局变量"__init__"。类似的东西在这里

>>> def method(self):
...     print(self)
... 

创建了一个名为“ method”的函数,其位置参数为“ 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对象。

相关问题