2017-12-11 21 views
0

같은 방식으로 다른 클래스에서 사용하려는 2 세트의 속성이 있습니다. 나는 클래스가 super 통화 및 불필요한 합병증을 방지하기 위해 속성으로이 세트로 혼합하는 것을 시도하고있다 :Python 3의 다른 클래스에서 동일한 클래스 속성을 사용하는 방법은 무엇입니까?

class Base: 
    def printAttr(): 
     print(attr) 

class MixIn1: 
    attr = "Monty" 

class MixIn2: 
    attr = "Python" 

class Combo1(Base, MixIn1): 
    pass 

class Combo2(Base, MixIn2): 
    pass 

c1 = Combo1() 
print(c1.attr) # it is assigned 
c1.printAttr() 

결과는 NameError: name 'attr' is not defined입니다. 분명히 MixIn1.attr을 명시 적으로 호출해도 작동하지만 클래스 자체에이 코드를 추가하는 것은 동일합니다.

attr 서로 다른 경제적 처리 방식을 사용하려면 어떻게해야합니까?

+0

오류가 표시된 코드와 일치하지 않습니다. –

+3

실제 코드를 표시하십시오. 'printAttr'가'self' 매개 변수를 잃어 버렸기 때문에 여러분이 게시 한 코드는 TypeError를 던질 것입니다; 'attr'가 그 메소드에서 정의되지 않았기 때문에 NameError를 던질 것입니다. –

+0

또한'printAttr' 메소드에'self' 매개 변수가 없습니다. –

답변

1

이 방법에 의해 요구 (보통 self을라고도 함) 한 위치 인수를 추가 적절하게 사용하고 예상대로 작동합니다

class Base: 
    def printAttr(self): 
     print(self.attr) 

>>> c1 = Combo1() 
>>> c1.printAttr() 
Monty 

>>> c2 = Combo2() 
>>> c2.printAttr() 
Python 
+0

감사합니다. 나는 'self'가 클래스 속성이 아닌 인스턴스 속성에만 필요하다고 생각했다. – homocomputeris

0

빠른 팁 : 당신이 함수 (방법)를 사용 할 때마다 수업에서 항상 매개 변수에 '자아'를 둡니다. 이것은 모든 방법에 필수입니다. 사실 Pycharm IDE를 사용하면 self 매개 변수가 자동 완성됩니다.