2014-01-17 2 views
-1

하나의 파일에 여러 클래스와 하위 클래스를 만들고 두 번째 파일에서 사용하도록 요구하는 프로젝트를 진행 중입니다. 파이썬이 첫 번째 파일을 두 번째 파일로 가져 오는 방법을 묻고 싶습니다. 예를 들어파이썬은 임포트 된 서브 클래스를 어떻게 처리합니까?

, 내가 파일 my_classes.py이있는 경우 :

class Myclass(object): 
    pass 

class Mysubclass(myclass): 
    pass 

다음과 같은 코드가 작동을 사용합니다 :

from my_classes import Myclass 

print Mysubclass 

합니다 (print 명령 Mysubclass을 사용하여 단지 예입니다) 또는 Mysubclass을 명시 적으로 가져올 필요가 있습니까?

미리 감사드립니다.

+1

왜이 코드를 시도해보고 오류가 있는지 확인하십시오. – zhangxaochen

+0

명백한 해결책처럼 보이고 참으로 내 질문에 답합니다. 그러나 파이썬이 어떻게 동작하는지에 대한 배경 정보를 원합니다 (예 : 클래스를 가져올 때 하위 클래스가 자동으로로드되지 않는 이유). – LSchoon

답변

0

이것은 작동하지 않습니다. Python import 문은 하위 클래스를 신경 쓰지 않습니다. 사실, 아무 것도 신경 쓰지 않습니다. 그것은 당신이 말하는 것을 정확하게합니다. "Explicit은 implicit보다 낫다"는 Python 서클에서 널리 사용되는 말입니다. 여기

:

from my_classes import Myclass 

는 만 Myclass를 가져올 파이썬 말했다.

이 두 클래스를 가져옵니다 :

from my_classes import Myclass, Mysubclass 

당신이 읽을 수있는 방법을 here 작동 import 파이썬.

+0

감사합니다. 귀하가 제공 한 링크는 제 이해력을 약간 뛰어 넘지 만, 제가 가진 질문에 대한 답변을 제공합니다. – LSchoon

0

이렇게하면 하위 클래스를 사용할 수 없습니다. 모든 개체를 가져와야합니다. 데프 초기화 (자기) : 인쇄 자기 여기에 빠른 예를

test_class.py MyClass 클래스 (객체)

. test_class 수입 MyClass에에서 클래스

class MySubClass(MyClass): 
    def __init__(self): 
     print self.__class__ 

test_class_import.py 는

MyClass() 
MySubClass() 

##output## 
<class 'test_class.MyClass'> 
Traceback (most recent call last): 
    File "test_class2.py", line 4, in <module> 
    MySubClass() 
NameError: name 'MySubClass' is not defined 

하지만

from test_class import MyClass, MySubClass 
MyClass() 
MySubClass() 

##output## 
<class 'test_class.MyClass'> 
<class 'test_class.MySubClass'> 
0

모든 모듈은 공간이있다.

네임 스페이스는 변수 이름에서 값 (Python 개체)으로의 매핑입니다.

import my_classes 

은 현재 모듈의 네임 스페이스에 변수 이름 my_classes을 배치하여 현재 모듈에서 my_classes 네임 스페이스에 액세스 할 수 있습니다.그러면 예를 들어,

my_classes.variable 

그래서 구문 my_classes에서 값에 액세스 할 수 있습니다

import my_classes 
print my_classes.Mysubclass 
print my_classes.MyClass 

을 그 너무 많이 입력 인 경우, 당신은 또한

을 할 수

import my_classes as MC 
print MC.Mysubclass 
print MC.MyClass 

을 제안

from my_classes import Mysubclass, MyClass 

이 가져 오기 형식은 discouraged by some Python experts입니다.

from my_classes import Mysubclass, MyClass 

은 전체 모듈을 my_class 만 장소 변수 이름 현재 모듈의 네임 스페이스에 MysubclassMyClass를로드합니다. 이들은 my_classes 네임 스페이스의 같은 이름의 변수와 동일한 값을 가리 킵니다. my_class 모듈의 네임 스페이스에서 다른 것에 액세스 할 수 없습니다.

관련 문제