如果有__init__.py文件,是否应该有__new__.py文件?
If there is an __init__.py file, should there be a __new__.py file?
我正在开发一个结构如下的程序:
program/
base/
__init__.py
module1.py
module2.py
...
app1/
__init__.py
module11.py
module12.py
...
app2/
__init__.py
module21.py
module22.py
...
...
包 base
的 __init__.py
用于公开 app1
和 app2
共同需要的最小对象集,如下所示:
# __init__ file
from module1 import rock, paper
from module2 import scissor
...
我理解当一个程序实现了一个class,并且当那个程序被执行时,解释器调用class的__new__
方法(如果它存在),然后调用__init__
方法。
我的问题是:包是否可以实现一个 __new__.py
文件,其工作方式与 class 的 __new__
方法相同?对于我的程序,我将使用这样的文件来动态更改 rock
、paper
或 scissor
.
不,他们不能。 specification of the import system 声明只有 __init__.py
被语言以特殊方式使用。您放入该文件夹中的任何其他文件都只是一个普通文件。
在对象创建方面与__init__
方法的相似之处仅限于名称。
我正在开发一个结构如下的程序:
program/
base/
__init__.py
module1.py
module2.py
...
app1/
__init__.py
module11.py
module12.py
...
app2/
__init__.py
module21.py
module22.py
...
...
包 base
的 __init__.py
用于公开 app1
和 app2
共同需要的最小对象集,如下所示:
# __init__ file
from module1 import rock, paper
from module2 import scissor
...
我理解当一个程序实现了一个class,并且当那个程序被执行时,解释器调用class的__new__
方法(如果它存在),然后调用__init__
方法。
我的问题是:包是否可以实现一个 __new__.py
文件,其工作方式与 class 的 __new__
方法相同?对于我的程序,我将使用这样的文件来动态更改 rock
、paper
或 scissor
.
不,他们不能。 specification of the import system 声明只有 __init__.py
被语言以特殊方式使用。您放入该文件夹中的任何其他文件都只是一个普通文件。
在对象创建方面与__init__
方法的相似之处仅限于名称。