2012-05-06 56 views
4

我在兩個不同的模塊有兩類:子類無法識別父類的模塊導入?

  • animal.py
  • monkey.py

animal.py:

import json 

class Animal(object): 
    pass 

猴:

import animal 

class Monkey(animal.Animal): 

    def __init__(self): 
     super(Monkey, self).__init__() 

     # Do some json stuff... 

當我嘗試實例化一個Monkey,我得到一個

NameError: global name 'json' is not defined 

但我超類的定義模塊進口json,那麼,爲什麼不是被加載?

回答

11

它已加載,但其名稱在monkey.py的範圍內不可用。

,您可以鍵入animal.json得到它(但你爲什麼會),或只需鍵入

import json 
monkey.py

爲好。 Python將確保模塊不會被加載兩次。

+0

所以我認爲我的導入模塊到不使用它們的基類是毫無意義的? – Yarin

+1

是的,您應該只導入您在文件中使用的模塊。 – thebjorn

+0

一般來說,我會同意thebjorn,但有時候可能更方便從另一個模塊中引用模塊,例如。當一個模塊捆綁了來自其他模塊的許多功能時。 – XORcist

2

那麼,python導入不能作爲C#包括預處理器指令。他們只將模塊導入導入模塊的名稱空間,而不導入全局名稱空間。所以,你將不得不在你打算使用它的每個模塊中導入json。

+1

'僅由導入模塊使用',不正確。見托馬斯的回答。 – XORcist

+0

對,編輯... – smichak