Перечисление всех дополнительных функций намерения

Нет никакого разумного способа сделать эту "систему" свойства класса для работы в 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 или своего рода проблемно-ориентированный язык.

Однако в комментарии к предыдущему ответу, Вы говорите, что Вы

потребность изменить атрибут, который таким способом, который замечен всеми экземплярами класса, и в объеме, от которого называют эти методы класса, не имеет ссылок на все экземпляры класса.

мне, кажется, что Вы действительно хотите, Наблюдатель шаблон разработки.

234
задан stefan.at.wpf 11 May 2011 в 07:31
поделиться

1 ответ

Просто называют намерение пакета:

Bundle bundle = intent.getExtras();
if (bundle != null) {
    for (String key : bundle.keySet()) {
        Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
    }
}
0
ответ дан 17 September 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: