2012-05-06 5 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을 입력합니다 (그러나 이유를 것), 또는 단지뿐만 아니라 monkey.py에서

import json 

를 입력 할 수 있습니다. 파이썬은 모듈이 두 번로드되지 않도록합니다.

+0

그래서 가져 오기 모듈을 사용하지 않는 기본 클래스에 무의미하다고 생각합니까? – Yarin

+1

예, 파일에서 사용하는 모듈 만 가져와야합니다. – thebjorn

+0

일반적으로 나는 thebjorn에 동의하지만 때로는 다른 모듈 내에서 모듈을 참조하는 것이 더 편리 할 수도 있습니다. 모듈이 다른 모듈의 많은 기능을 번들로 제공 할 때 – XORcist

2

글쎄 파이썬 임포트는 C#include 전처리 지시어처럼 작동하지 않습니다. 모듈을 가져 오는 모듈의 네임 스페이스에만 가져오고 전역 네임 스페이스에는 가져 오지 않습니다. 그래서, 당신은 그것을 사용하고자하는 모든 모듈에서 json을 가져와야 할 것입니다.

+1

'이 (가) 가져 오기 모듈에서만 사용됩니다.'는 사실이 아닙니다. 토마스 대답을보십시오. – XORcist

+0

오른쪽, 수정 됨 ... – smichak

관련 문제