基于a question I previously asked,我尝试提出一个允许设置和获取的类属性。所以我写了这个并把它放在模块util
:
class classprop(object):
def __init__(self, fget, fset=None):
if isinstance(fget, classmethod):
self.fget = fget
else:
self.fget = classmethod(fget)
if not fset or isinstance(fset, classmethod):
self.fset = fset
else:
self.fset = classmethod(fset)
def __get__(self, *a):
return self.fget.__get__(*a)()
def __set__(self, cls, value):
print 'In __set__'
if not self.fset:
raise AttributeError, "can't set attribute"
fset = self.fset.__get__(cls)
fset(value)
class X(object):
@classmethod
def _get_x(cls):
return 1
@classmethod
def _set_x(cls, value):
print 'You set x to {0}'.format(value)
x = classprop(fget=_get_x, fset=_set_x)
在开始工作的同时,设置似乎没有被调用:
>>> util.X.x
1
>>> util.X.x = 1
>>>
我做错了什么?
(我已经看到这种方式的实现有点不同。我特别想知道为什么这个实现不起作用。)
答案 0 :(得分:0)
object.__set__(self, instance, value)
被调用以设置属性 所有者的实例实例 将类分类为新值 value 。
与__get__
不同,它没有提及类属性。所以Python不会在类属性上调用任何 __set__
。