Можно ли создать свойство из класса? - PullRequest
0 голосов
/ 15 октября 2019

Я хотел бы спросить, может ли быть скрытый улов при следующем использовании @property. Он прошел все тесты, но это необычная комбинация.

class Block:
    def __init__(self):
        self.enabled = False

    @property
    class enable:
        def __init__(self, block):
            self._block = block
            self._saved = None

        def __enter__(self):
            block = self._block
            self._saved = block.enabled
            block.enabled = True
            return block

        def __exit__(self, *exc_info):
            self._block.enabled = self._saved

# example
b = Block()
print(b.enabled)
with b.enable:
    print(b.enabled)
print(b.enabled)

ОБНОВЛЕНИЕ: несмотря на пример, менеджер контекста будет использоваться исключительно во внутреннем коде, например, with self._enable: .... Он не будет частью API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...