Il n'y a aucun moyen raisonnable de faire de cette "propriété de la classe" système de travail en Python.
Voici une façon déraisonnable pour le faire fonctionner. Vous pouvez certainement le rendre plus transparent avec des quantités croissantes de métaclasse de la magie.
class ClassProperty(object):
def __init__(self, getter, setter):
self.getter = getter
self.setter = setter
def __get__(self, cls, owner):
return getattr(cls, self.getter)()
def __set__(self, cls, value):
getattr(cls, self.setter)(value)
class MetaFoo(type):
var = ClassProperty('getvar', 'setvar')
class Foo(object):
__metaclass__ = MetaFoo
_var = 5
@classmethod
def getvar(cls):
print "Getting var =", cls._var
return cls._var
@classmethod
def setvar(cls, value):
print "Setting var =", value
cls._var = value
x = Foo.var
print "Foo.var = ", x
Foo.var = 42
x = Foo.var
print "Foo.var = ", x
Le nœud de la question est que les propriétés sont ce que Python appelle "descripteurs". Il n'y a aucun moyen court et facile à expliquer comment ce genre de métaprogrammation œuvres, donc, je dois vous le descripteur de howto.
Vous n'avez besoin de comprendre ce genre de choses, si vous êtes à la mise en œuvre d'une assez avancé cadre. Comme un objet transparent persistance ou de la RPC système, ou une sorte de langue propres au domaine.
Cependant, dans un commentaire à une précédente réponse, vous dites que vous
besoin de modifier un attribut dans une façon qui est considérée par toutes les instances d'une classe, et dans le champ d'application de ces méthodes de la classe sont appelés n'ont pas de références à toutes les instances de la classe.
Il me semble, ce que vous voulez vraiment est un Observateur modèle de conception.