2009-12-23 36 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 2009-12-23 08:58:18

回答

1

要调用obj.get,但在class A没有get功能,因此错误, 或者重命名__get__get,或者如果你碰巧要使用的描述做这样的事情

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 2009-12-23 08:43:27

+0

咦?我认为它是'print a.get('aa')'。我会改变我的回答 – pkit 2009-12-23 08:47:00

+0

它确实在一开始读了'print a.get('aa')',但是OP修正了它。 – sth 2009-12-23 08:50:43