簡體   English   中英

如何導入另一個外部python模塊?

[英]How to import another external python module?

這可能是一個愚蠢的問題,但是並不確定要做什么。

main.py

import module2
global x
hello="Hello"
x=module2.message()
x.say()

module2.py

class message:
    def say():
        print hello

當我打印hello時,我指的是main.py中的hello變量,但是此方法將返回錯誤。 有誰知道解決方案? (我不希望將hello變量通過管道傳遞給函數)

唯一可靠的解決方案稱為封裝

因此,基本上,您可以將代碼更改為如下所示:

main.py

import module2

global x
hello="Hello"
x=module2.message(hello)
x.say()

module2.py

class message:
    def __init__(self, hello):
        self.hello = hello
    def say():
        print self.hello

另外,請嘗試遵循Python的編碼樣式-您和以后的代碼開發人員的生活將更加輕松。

有多個選項,但請注意,一個模塊永遠無法直接訪問調用模塊。

  1. 只需將hello作為變量傳遞( def say(msg): print msg
  2. main.py所有變量main.pymodule2def say(g): print g['hello']say(globals())
  3. 將其存儲在某個地方,然后在需要時將其提取。

由於main.py導入module2.py ,因此您可以訪問main中的moule2中定義的全局變量。

在您的情況下,由於module2不導入main,因此在module2中不訪問main中的全局變量。

一種解決方案是@Tadeck定義的解決方案

在此特定示例中,module2.py導入main.py完全可以,但是有些陷阱。

最明顯的是main.py可能是從命令行運行的,就像python main.py ,它的作用是使該文件被稱為__main__ 您可以在module2中導入該模塊,但這有點不尋常。 它稱為“ main.py”,並且您要import main 這樣做將導致第二次導入該模塊。

為此, 除非您將文件導入為 __main__ 否則您必須安排文件沒有副作用。 python中一個非常常見的習慣用法是在模塊末尾測試該條件。

import module2
global x
hello="Hello"

def main():
    x=module2.message()
    x.say()

if __name__ == '__main__':
    main()

現在,module2.py實際上可以導入main 另一方面,很難將變量從一個模塊導入到另一個模塊中,很難預測何時可以遞歸導入,因為該模塊已經在嘗試導入 ,所以您可能還沒有該變量。 另一方面,使用虛線語法在模塊中引用變量始終是安全的。 因此,您的module2.py應該為:

import main
class message:
    def say():
        print main.hello

這也使得hello來源更加明顯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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