我有這兩個檔案:
main.py
def func_a():
return object_a.method()
class ClassA:
def __init__(self):
pass
def method(self):
return "k"
if __name__ == '__main__':
object_a = ClassA()
print(func_a())
import file_1
和file_1.py
import main
print(main.func_a())
我收到這些錯誤:
Traceback (most recent call last):
File "C:\Users\Utente\PycharmProjects\pythonProject\main.py", line 16, in <module>
import file_1
File "C:\Users\Utente\PycharmProjects\pythonProject\file_1.py", line 4, in <module>
print(main.func_a())
File "C:\Users\Utente\PycharmProjects\pythonProject\main.py", line 2, in func_a
return object_a.method()
NameError: name 'object_a' is not defined.
我想object_a
通過starting創建一次main.py
,并通過從其他檔案object_a
呼叫使用的方法func_a
(將由main.py執行)
uj5u.com熱心網友回復:
因為__name__ != "__main__"
,object_a
永遠不會在main.py
. 如果您從中洗掉object_a = ClassA()
,if
它將運行良好。
uj5u.com熱心網友回復:
這很令人困惑,因為您期望運行該行:object_a = ClassA()
將object_a
附加到main
模塊。
您可以嘗試將其添加為您的第一行main.py
:
print('top of main', __name__)
您將看到此行按預期執行兩次,但結果不同。
uj5u.com熱心網友回復:
為了得到你想要的,你實際上應該做的是去掉幾乎所有的東西,main.py
除了這個:
if __name__ == '__main__':
object_a = ClassA()
print(func_a())
import file_1
加上足夠的進口來使這個位作業,加上這個:set_object_a(object_a)
因此main.py
可以變成:
if __name__ == '__main__':
set_object_a(ClassA())
print(func_a())
import file_1
現在,您所擁有的所有其他內容都需要單獨進入另一個模塊,如下所示:
# notmain.py
object_a = None
def set_object_a(a):
global object_a
object_a = a
def func_a():
return object_a.method()
class ClassA:
def __init__(self):
pass
def method(self):
return "k"
現在您可以讓任何其他模塊執行此操作和類似操作:
import notmain
print(notmain.func_a())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470325.html
上一篇:重復printf()
下一篇:將連接的整數串列拆分為其原始形式