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) --> NoneThat 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这是关于获取和设置的“某事”,通常你会做一些更实质性的事情;-)。
