2011-11-10 4 views
1

클래스 메서드를 오버로드하려면 어떻게해야합니까? 역 추적했다Python 클래스 메서드 오버로드

class D(object): 
    def create(self): 
     foo = 100 
     bar = 'squirrels' 
     baz = 'I have %d insane %s in my head.' % (foo, bar) 
     return baz  

class C(D): 
    def create(self): 
     super(C, self).create() 
     baz = 'I have %s cute %s in my yard.' % (self.foo, self.bar) 

C().create() 

: 당신이 변수 foo가 그 함수의 지역 변수 의미 self에 변수를 설정하지

AttributeError: 'C' object has no attribute 'foo' 

답변

3

클래스 속성으로 로컬 변수를 사용하려고했습니다. 다음 변경을 시도하십시오.

class D(object): 
    def create(self): 
     self.foo = 100 
     self.bar = 'squirrels' 
     baz = 'I have %d insane %s in my head.' % (self.foo, self.bar) 
     return baz 

class C(D): 
    def create(self): 
     super(C, self).create() 
     print self.foo 
     self.baz = 'I have %s cute %s in my yard.' % (self.foo, self.bar) 

C().create() 
0

D.create에서와 내가 실패했습니다.

class D(object): 
    def create(self): 
     self.foo = 100 
     self.bar = 'squirrels' 
     self.baz = 'I have %d insane %s in my head.' % (self.foo, self.bar) 
     return self.baz 
+0

'create()'는 (는)'D' resp를 반환하지 않습니다. 'C' 객체가 아니라 문자열입니다. 그래서'__init__'는 아마도 어딘가로 이끌지 않을 것입니다 ... – glglgl

+0

@glglgl 맞습니다. 편집 답변. –