Skip to main content
 首页 » 编程设计

python之我如何使用 '__set__'

2025年05月04日14zengkefu

class A(object): 
    def __get__(self, instance, owner):#why i can't find argument 'key',where is 'key' 
        #print ower.instance 
        print instance,owner 
    def __set__(self,instance,value): 
        instance=value 
 
class X(object): 
    a = A() 
 
xx=X() 
xx.a='aaa' 
print xx.a#None 

请您参考如下方法:

海廷格的 HowTo Guide for Descriptors很好地涵盖了这一点。引用它:

Descriptor Protocol

descr.__get__(self, obj, type=None) --> value

descr.__set__(self, obj, value) --> None

descr.__delete__(self, obj) --> None

That is all there is to it.

因此,您可以随意命名参数,但通常没有名为 key 的参数至 __get__ (不知道你为什么要找到它)。

再举一个来自该 URL 的例子:

类 RevealAccess(对象): """设置和返回值的数据描述符 通常并打印一条消息记录他们的访问。 """

def __init__(self, initval=None, name='var'): 
    self.val = initval 
    self.name = name 
 
def __get__(self, obj, objtype): 
    print 'Retrieving', self.name 
    return self.val 
 
def __set__(self, obj, val): 
    print 'Updating' , self.name 
    self.val = val 

所以通常你设置self.something在__init__ (和/或 __set__ 如果您定义了它),并返回基于 self.something 的内容在__get__ .当然这个例子只是print这是关于获取和设置的“某事”,通常你会做一些更实质性的事情;-)。