簡體   English   中英

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM