2013-03-06 6 views
0
class a: 
    def set(self, value): 
     print value+1 

    def set2(self, value): 
     self.set(value) 

class b(a):   
    def set(self, value): 
     print value 

if __name__ == '__main__': 
    i = b() 
    i.set2(10) 

, 나는 의미 10과 같은 결과를 얻었다 파이썬 방법 재정 규칙, b.set() 호출했지만, 왜 안 a.set() 그것은 EXPLICT self 호출 된 이후?실행될 때

P. 따라서 'a'클래스에 set() 메서드가 없더라도이 코드는 여전히 작동합니까? 그러나 그것은 좋은 코딩 규칙입니까?

+2

'self'는 실제로 b 객체 그 자체입니다. –

+0

@avasal하지만 속성 오류가 발생하지 않았습니다. – j5shi

+2

'b' 객체를 어떻게 전달하는지 보셨습니까? 당신은 :'b'가'set2'를 호출하지만,'a'의'set2'가 호출되었으므로,'set2'가 어떻게'set'을 호출하는지 알 수 있습니까? 'self.set (value)'사용하기. 'self'는'b' 타입이기 때문에 당연히'b'''set'을 호출합니다. – dmg

답변

2

. 당신이 원하는 경우

class Animal(object): 
    def interact(self): 
     print('I am a {}, I say "{}"'.format(self.name(), self.speak())) 

class Dog(Animal): 
    def name(self): 
     return 'dog' 
    def speak(self): 
     return 'woof' 

, 당신은 명시 적으로 a.set()를 호출 할 수 있습니다.

class A(object): 
    def set(self, value): 
     print(value + 1) 
    def set2(self, value): 
     A.set(self, value) 

그러나 이것은 다소 바보입니다. 예는 너무 추상적이어서 좋은 코딩 스타일을 파악하는 데 사용할 수 없습니다.

+1

Nah, 동물의 예는 항상 좋은 예입니다 :) – dmg

3

파생 클래스에서 set()을 재정의 했으므로 self.set()에 의해 호출됩니다.

a의이 메서드를 호출하려면 다음 구문을 사용할 수 있습니다 : 당신이 self.set(value)를 호출 할 때, 항상 set() 당신에게 당신이 그것을 호출 상관없이 동일한 정의를 제공

a.set(self, value) 
0

aset()을 호출하려면 다음 구문을 사용해야합니다. a().set(10)

관련 문제