2010-05-10 5 views
1

여러 번 실행되는 메서드가 있습니다. 내부에 ifs를 중첩시키고 싶지는 않지만 메서드를 덮어 쓰고 실행하려고합니다. 난 내가 간단한의 할당은에 의해 클래스 메소드를 덮어 쓸 수 있다는 것을 알고 있지만, 덮어 씌우 방법은 개인 회원이 표시되지 않습니다파이썬에서 런타임에 메서드 덮어 쓰기

class X: 
    def __init__(self, a): 
     self.a = a 
     self.__b = a 

    def m(self): 
     print self.a 
     print self.__b 

def a2(self): 
    print (2*self.a) 
    print (2*self.__b) 

x = X(2) 
x.m() 
X.m = a2 
x.m() 

출력 :

2 
2 
4 
Traceback (most recent call last): 
    File "t.py", line 17, in <module> 
    x.m() 
    File "t.py", line 12, in a2 
    print (2*self.__b) 
AttributeError: X instance has no attribute '__b' 

이 문제를 해결하기 위해 어떤 기회가 있습니까? Google은 대답을 표시하지 않습니다 : (

답변

4

두 개의 밑줄로 시작하는 클래스의 속성은 이름이 불분명합니다. 필요하지 않다면 사용하지 마십시오. 개인적으로 별다른 의미가 없으므로 하나의 밑줄 대신.

a2()의 속성 액세스 하지 이름 엉망이 있기 때문에이 문제가 발생하는 이유는. 내가 _ClassName_var에 __var 동안 그 파이썬 변경 이름을 알고하지만 난이 생각

+0

길 파이썬입니다 private 멤버를 처리합니다. –

+0

파이썬에는 "private member"와 같은 것이 없습니다. 할 수있는 일은 강력한 힌트를 제공하는 것입니다. 아무렇지도 않게 조작해서는 안된다. –