0
根据a question I previously asked,我试图想出一个类属性,可以设置以及获取。所以我写了这一点,并把它放在一个模块util
在:为什么这个classprop实现不起作用?
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
>>>
我在做什么错?
(我已经看到了这一点,工作有一点不同的实现方式。我专门想知道为什么这实现不工作。)
为什么'X'不是实例,'type'是类? – 2010-09-18 20:03:38
实例和类型不同,写入它们也是如此。 Python只是不按照你希望的方式来实现描述符。 – 2010-09-18 20:27:35