2009-12-23 2 views
0

이것은 내 코드입니다. 왜 작동하지 않는지 모르겠다.누가 __get__, __set__ 및 __del__을 (를) 호출 할 수 있습니까?

class a: 
    def __get__(self): 
     return 'xxx' 
    def aa(self): 
     print 'aaaa' 

b=a() 
print b.get('aa') 

제 영어가 좋지 않으므로 코드로 답하십시오. 고맙습니다.

class HideX(object): 
    def __init__(self, x): 
     self.x = x 

    def get_x(self): 
     return self.__x 

    def set_x(self, x): 
     self.__x = x+10 

    x = property(get_x, set_x) 

inst = HideX(20) 
print inst.x 
inst.x = 30 
print inst.x 
+0

같은이 없다 이 코드를 실행할 때? 예상되는 결과는 무엇입니까? – sth

답변

1

당신은 obj.get을 요구하고 있지만, 중 하나 __get__ 우연히 당신이 기술자를 사용하려고 get에 또는 경우 이름을 변경 더 가져 오기 class A의 기능, 따라서 오류, 할 일이해야합니까이

class A(object): 
    def __get__(self, obj, klass): 
     print "__get__", obj, klass 
     return 'xxx' 

class X(object): 
    a = A() 

x=X() 
print x.a 
1

사용하기 전에 Descriptors에 대해 좀 더 자세히 읽어야한다고 생각합니다.

+0

두 줄의 마지막 줄의 차이점은 무엇입니까? – Boldewyn

+0

응? 나는 'print a.get ('aa ')'라고 읽은 것 같아. 내 대답을 바꿀거야 – pkit

+0

처음에는'print a.get ('aa')'를 읽었지만 OP는 그것을 고쳤다. – sth

관련 문제