Basé sur a question I previously asked, j'ai essayé de trouver une propriété de classe qui permettrait de régler et d'obtenir. semblePourquoi cette implémentation classprop ne fonctionne-t-elle pas?
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)
Tout en obtenant fonctionne, le réglage ne doit pas être se disant:: Alors je l'ai écrit cela et le mettre dans un module util
>>> util.X.x
1
>>> util.X.x = 1
>>>
Qu'est-ce que je fais mal?
(Et je l'ai vu les mises en œuvre de ce qui fonctionnent un peu différemment. Je suis particulièrement vouloir savoir pourquoi cette mise en œuvre ne fonctionne pas.)
Pourquoi "X" ne serait-il pas l'instance et 'type' la classe? –
Les instances et les types sont différents et ainsi leur écrit. Python n'implémente pas les descripteurs comme vous le souhaitez. –