Нет никакого разумного способа сделать эту "систему" свойства класса для работы в Python.
Вот один неблагоразумный способ заставить его работать. Можно, конечно, сделать его более бесшовным с увеличивающимися суммами волшебства метакласса.
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
узел проблемы - то, что свойства - то, что Python называет "дескрипторами". Нет никакого короткого и простого способа объяснить, как этот вид работ метапрограммирования, таким образом, я должен указать на Вас на практическое руководство дескриптора .
только когда-либо необходимо понимать этот вид вещей при реализации довольно усовершенствованной платформы. Как персистентность прозрачного объекта или система RPC или своего рода проблемно-ориентированный язык.
Однако в комментарии к предыдущему ответу, Вы говорите, что Вы
потребность изменить атрибут, который таким способом, который замечен всеми экземплярами класса, и в объеме, от которого называют эти методы класса, не имеет ссылок на все экземпляры класса.
мне, кажется, что Вы действительно хотите, Наблюдатель шаблон разработки.
Просто называют намерение пакета:
Bundle bundle = intent.getExtras();
if (bundle != null) {
for (String key : bundle.keySet()) {
Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
}
}