Я хотел бы спросить, может ли быть скрытый улов при следующем использовании @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.