2016-10-25 3 views
0

나는 두 개의 파일이 있습니다다른 파일에서 클래스를 상속하는 방법은 무엇입니까?

fig.py

import math 
PI=math.pi 

class Fig: 
    def __init__(self): 
     self.name= " " 

그리고

circle.py

class Circle(Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

그러나 나는 jupyter 노트북 그것을 시도 할 때마다 그들에게 I를로드하려고 오류가 발생합니다 :

NameError: name 'Fig' is not defined

import fig을 사용하여 circle.py으로 시작했는데 작동하지 않으며 두 파일을 모두 실행하지 않습니다. 둘 다 같은 디렉터리에 있습니다.

답변

6

좋아 그것 뿐이다 정확히 분명 당신이 당신이하고있는 정확하게 무엇을 우리에게 보내하지 않았기 때문에, 잘못된거야하지만, 여기 내 추측이다.

import fig 
class Circle(Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

파이썬이 알고하지 않기 때문에이 중단됩니다 다음과 같이 circle.py 파일 인 경우 어디 Fig를 찾을 수 있습니다. 대신 당신이

import fig 
class Circle(fig.Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

또는

을 작성하는 경우
from fig import Fig 
class Circle(fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

모든 것이 잘 작동합니다. 이것은 당신이 파이썬에게 클래스를 접근 할 수있는 네임 스페이스 (나의 첫 번째 솔루션) 또는 명시 적으로 클래스 (두 번째 솔루션)를 가져올 수 있어야하기 때문입니다.

import fig 
class Circle(fig.Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 
     #use PI from fig.py by informing python of namespace 
     self.circumference = 2.*fig.PI*radius 

또는

from fig import Fig, PI 
class Circle(fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 
     #PI is now explicitly imported so don't need namespace 
     self.circumference = 2.*PI*radius 
+0

두 옵션을 모두 상속했지만 처음 두 줄은 작동하지 않습니다.I * circle을 실행하면 PI가 정의되지 않습니다. 둘 다 실행하면 * SyntaxError : 구문이 잘못되었습니다 *. – D1X

0

당신은 circle.pyfig.py에서 클래스 Fig을 가져와야 : 당신이 PI을 사용하려는 경우 동일한 논리가 적용됩니다.

그냥 모듈 fig을 가져 오는 경우, 당신은 각각의 네임 스페이스를 통해 클래스 Fig에 액세스해야합니다

class Circle(fig.Fig): 
    <snip> 

을 직접 클래스 이름을 사용하려면, from fig import Fig를 사용하여 가져옵니다.

관련 문제