2013-03-27 15 views
1

我在Python中遇到了以下問題。假設有3個文件:在Python中使用導入類的對象作爲另一個類的全局變量

1)a.py(定義類A):

class A: 
    def a_method(self): 
    print "global var experiment" 

2)b.py(定義了使用類A的全局對象的方法)類B:

class B: 
    def b_method(self): 
    print "calling a_method() from B..." 
     obj_a.a_method() 

3)global_ex.py:

from a import A 

obj_a=A()  
obj_a.a_method() 

from b import B 

obj_b = B() 
obj_b.b_method() 

當我運行global_ex.py我得到的錯誤:

NameError: global name 'obj_a' is not defined 

如果不是導入a.py和b.py,我將它們複製粘貼到global_ex.py中,它工作正常。

這裏有什麼問題? 通常,在另一個對象中使用一個對象的方法的最佳方法是什麼?

預先感謝您。

+0

好,'obj_a'不b.py'的'全球範圍內定義的 - 你會喜歡解釋器複製粘貼導入的模塊的文本,而不是使用編譯的字節碼? – Aprillion 2013-03-28 00:14:17

回答

1

編輯:

嘗試:

from a import A 

class B(): 

    def __init__(self): 
     self.a_obj = A() 

    def b_method(self): 
     print "calling a_method() from B..." 
     self.a_obj.a_method() 

或者:

class B(): 

    def __init__(self, a_inst): 
     self.a_inst = a_inst 

    def b_method(self): 
     print "calling a_method() from B..." 
     self.a_inst.a_method() 
+0

但是,謝謝,我在這裏給了一個簡單的例子。在我的真實情況下,類A包含其他成員和方法,其他類應該可以訪問它們。現在我想,也許最好的方法是將obj_A作爲參數傳遞給b_method。它應該這樣工作,不是嗎? – jazzblue 2013-03-27 07:32:42

+0

@GregoryR - 是的,它會工作,你提到的方式,它的使用情況一個 – 2013-03-27 07:33:50

+0

@GregoryR:不是傳遞'obj_a'到'b_method()的'每次調用它的時候,你也可以添加一個'__init__ ()'方法在構造'obj_b'時傳遞給'class B'並將'obj_a'傳遞給它'當然'__init __()'必須在需要時在'b_method'中保存訪問值這個答案的第二個例子顯示了什麼。 – martineau 2013-03-27 08:07:44

相關問題