我有一個超類的自初始化實例有條件進口,但子類不能看到該模塊(Python的2.7):子類__init__沒有看到超conditonally導入模塊
class A(object):
def __init__(self, arg1):
self.attr1 = self.method1(arg1)
def method1(self, arg1):
if arg1 == 'foo':
import amodule
return amodule.method1()
else:
return 'not a dependency on foo'
class B(A):
def __init__(self, arg1):
super(B, self).__init__(arg1)
if arg1 == 'foo':
self.attr2 = self.method2(self.attr1)
def method2(self, attr1):
return amodule.method2()
if __name__=='__main__':
b = B("foo")
print b.attr2
這將引發NameError: global name 'amodule' is not defined
。 a = A("foo")
工程就好了
在這種情況下,super
調用是否應該執行import amodule
? (並且使用import
應該將模塊置於全局模式?)
'amodule'是*局部變量*。你爲什麼會認爲你可以在'method2'中訪問它?另外,'import'語句不會在全局名稱空間中綁定模塊名稱,而是在任何名稱空間中綁定import語句。再次,這將是* local1到'method1' *。 –
不會將當前正在執行的模塊的全局名稱空間導入add/amodule /? (\_\_主要\_\_)? – cowbert
不,它不會自己檢查這個'def f():import sys',然後調用'f()'看看sys是否在全局命名空間中,它不是(除非它已經)。 –