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
答案 0 :(得分:4)
Hettinger的HowTo Guide for Descriptors涵盖了这一点。引用它:
描述符协议
descr.__get__(self, obj, type=None) --> value
descr.__set__(self, obj, value) --> None
descr.__delete__(self, obj) --> None
这就是它的全部内容。
所以,你可以根据自己的意愿命名参数,但通常没有名为key
到__get__
的参数(不知道你为什么试图找到它)。
再次来自该网址的示例:
类RevealAccess(对象): msgstr“”“设置和返回值的数据描述符 通常并打印记录其访问权限的消息。 “”“
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
获取和设置的“东西”,通常你会做更实质的事情; - )。
答案 1 :(得分:2)
你的意思是使用__getattribute__吗?它有一个通常称为key的参数;虽然它可以是任何名字。你对__set__的定义看起来应该是__setattribute __
答案 2 :(得分:1)
我想你可以阅读描述符:
http://users.rcn.com/python/download/Descriptor.htm
或许您想要的是自定义属性访问:
http://docs.python.org/reference/datamodel.html#customizing-attribute-access
也许这个指针可以帮到你,或者你可能更具体一点?