![](/img/trans.png)
[英]Call a function of inside function in main file from module using python
[英]Call a function in main file from module using python
我正在嘗試制作一個可以這樣工作的python腳本:
我有一個導入另一個文件的主文件,它是一個包含函數的類。 主文件調用模塊中的一個函數,在這里它運行良好,但是當模塊內的 def 再次調用主文件中的另一個 def 時,我收到錯誤消息。
例如,在 main.py 我有這個
from module import *
module = Example()
def foo():
module.foo2()
def foo3():
print "here is the problem"
if(__name__ == "__main__"):
foo()
在 module.py 我有:
class Example():
def foo2(self):
foo3()
foo2 被完美調用,但是當我嘗試調用 foo3() 時,我得到一個 NameError(全局名稱 'foo3' 未定義)。 我知道我應該以某種方式導入它,但我不知道該怎么做。
最后一件事:我對python很陌生所以請解釋好:-)謝謝
我會避免創建循環依賴項並重構您的代碼,使 foo3 要么在模塊中,要么在另一個新模塊中。 例如(當我繼續關注PEP8 時,我清理了一些東西):
主文件
import module
example = module.Example()
def foo():
module.foo2()
if __name__ == "__main__":
foo()
模塊.py
import module3
class Example():
def foo2(self):
module3.foo3()
模塊3.py
def foo3():
print "here is the problem"
如果您絕對必須保持循環依賴,那么處理它的最佳方法是按照effbot 的建議將 module.py 中的導入移動到文件的末尾。 同樣,我會不惜一切代價避免這樣做。
class Example():
def foo2(self):
main.foo3()
import main
您希望從模塊調用 main 中的 foo3 嗎? 這將在模塊中工作:
class Example():
def foo2(self):
from main import foo3
foo3()
但是,我不確定這會給你帶來什么模塊(這種循環依賴有多大用處),因為這兩個模塊現在緊密地相互依賴。 我想您希望 Example 類能夠使用來自任何調用者的 foo3 函數。
我會做一些事情,比如將函數傳遞給類:
from module import *
module = Example()
def foo():
module.foo2(foo3)
def foo3():
print "here is the problem"
if __name__ == "__main__":
foo()
然后在module.py中:
class Example():
def foo2(self, myFoo):
myFoo()
很抱歉回復晚了,但我找到了一個非常優雅但“hackish”的解決方案:
在你的主模塊中,你可以添加這個:(不需要遞歸導入......)
module.foo3 = foo3
它的效果是foo3
現在是module.py
已定義的東西,即使您從未在該文件中聲明過它! 嘗試一下。 有用。
我遇到了這種情況,我想把我的 GUI 界面放在另一個文件中,但 GUI 顯然必須調用主模塊中的函數。 所以我絕望地找到了這個解決方案:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.