使用模块中__init__.py中定义的方法

use*_*891 13 python

假设我有以下目录结构:

lib\
--__init__.py
--foo.py
--bar.py
Run Code Online (Sandbox Code Playgroud)

在foo和bar里面,有两种方法都需要相同的方法.例如:

FOO:

def method1():
    win()
Run Code Online (Sandbox Code Playgroud)

酒吧:

def method2(number):
    if number < 0:
        lose()
    else:
        win()
Run Code Online (Sandbox Code Playgroud)

init:

def win():
    print "You Win!"

def lose():
    print "You Lose...."
Run Code Online (Sandbox Code Playgroud)

有没有办法在模块各自的子文件中使用init .py中的win和lose方法,或者我是否必须在文件夹中创建另一个文件并将foo和bar导入?

小智 7

使用相对导入:

from . import win, lose
Run Code Online (Sandbox Code Playgroud)


Jul*_*ian 7

是的,只需导入__init__.py模块(通过绝对或相对导入,它并不重要).

我从不喜欢相对导入,所以我用import mypackagein进行mypackage.foo,导入__init__.py就像相对导入一样,然后在那里使用它.我也不喜欢把任何东西__init__.py放进去,所以也许你应该考虑共享的公共文件.