AngularJS обещает уведомить не работает

То, как вы это описываете, абсолютно невозможно. Назначение имени является фундаментальной особенностью Python, и для изменения его поведения не предусмотрены перехватчики.

Однако назначение члену экземпляра класса можно контролировать , поскольку вы хотите, переопределив .__setattr__().

class MyClass(object):
    def __init__(self, x):
        self.x = x
        self._locked = True
    def __setattr__(self, name, value):
        if self.__dict__.get("_locked", False) and name == "x":
            raise AttributeError("MyClass does not allow assignment to .x member")
        self.__dict__[name] = value

>>> m = MyClass(3)
>>> m.x
3
>>> m.x = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in __setattr__
AttributeError: MyClass does not allow assignment to .x member

Обратите внимание, что существует переменная-член, _locked, которая контролирует, разрешено ли присвоение. Вы можете разблокировать его, чтобы обновить значение.

14
задан jcm 28 January 2014 в 09:48
поделиться