Czy istnieje sposób w Pythonie, aby napisać klasę, która będzie zawierać błąd, chyba że jest używana z instrukcją?Pisanie klasy Pythona, która może być używana tylko jako menedżer kontekstu.
# Okay:
with Foo() as f1:
f1.func1()
f1.func2()
# Not okay:
f2 = Foo()
f2.func1()
mogę to zrobić ręcznie: nie __enter__
ustawić flagę i mieć każdą inną kontrolę metody dla tej flagi. Ale czy jest lepszy sposób na zrobienie tego?
Oto kod dla nie tak od okazji:
class Foo(object):
def __init__(self):
self._entered = False
def __enter__(self):
self._entered = True
return self
def _verify_entered(self):
if not self._entered:
raise Exception("Didn't get call to __enter__")
def __exit__(self, typ, val, traceback):
self._verify_entered()
print("In __exit__")
def func1(self):
self._verify_entered()
# do stuff ...
def func2(self):
self._verify_entered()
# do other stuff
Potrzebujesz dla 'foo()', aby spowodować błąd, lub czy 'f2.func1()' będzie w porządku? – Blckknght
@Blckknght, mając Foo() spowodować, że błąd jest tylko skromniej niż mieć f2.func1() zrób to – kuzzooroo
Możesz użyć dekoratora lub metaclass, aby zastosować kontrole automatycznie zamiast ręcznie. – agf