Свойство использования декоратора средства удаления в Python

Я играю вокруг со свойством в Python, и я задавался вопросом, как этот @propertyName.deleter декоратор работает. Я, вероятно, пропускаю что-то, я не мог найти четкие ответы Google.

То, чего я хотел бы достигнуть, - когда это поведение средства удаления называют, я могу инициировать другие действия (например: использование моего 3-го SDK приложения).

На данный момент просто простая печать (), кажется, не инициирована.

Средство удаления запущено, когда я удаляю свойство с помощью del (instance.property)?

Иначе, как я могу достигнуть этого?


class M():

    def __init__(self):
        self._m = None

    @property
    def mmm(self):
        return self._m

    @mmm.setter
    def mmm(self, val):
        self._m = val

    @mmm.deleter
    def mmm(self):
        print('deleting') # Not printing
        del(self._m)




if __name__ == '__main__':

    i = M()
    i.mmm = 150
    print(i.mmm)
    del(i.mmm)
    print(i.mmm)


Большое спасибо (:

11
задан 16 December 2009 в 04:11
поделиться

2 ответа

Сделайте M классом нового стиля:

class M(object):

См. http://www.python.org/download/releases/2.2.3/descrintro/#property :

Свойства не работают в классической версии классы , но вы не получаете четкого ошибка при попытке это. Ваш получить будет вызван метод, поэтому он появится работать, но по атрибуту присвоение, экземпляр классического класса просто установит значение в своем dict без вызова метода set свойства, а после этого метод get свойства не будет называется либо. (Вы можете переопределить setattr , чтобы исправить это, но это будет слишком дорого.)

12
ответ дан 3 December 2019 в 06:21
поделиться

В Python 3 вы БУДЕТЕ увидеть результат print - а затем AttributeError для последнего вывода (потому что _m исчез). Возможно, вы используете Python 2.6, и в этом случае вам нужно изменить предложение class на class M (object): , чтобы сделать M новым стилем, и тогда вы получите то же поведение, что и в Python 3.

7
ответ дан 3 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

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