के रूप में उपयोग किया जा सकता है क्या पाइथन में एक वर्ग लिखने का कोई तरीका है जो त्रुटि के साथ उपयोग किए जाने तक त्रुटि करेगा?एक पायथन क्लास लिखना जिसे केवल संदर्भ प्रबंधक
# Okay:
with Foo() as f1:
f1.func1()
f1.func2()
# Not okay:
f2 = Foo()
f2.func1()
मैं इसे स्वयं कर सकते हैं: __enter__
एक ध्वज सेट और कहा कि ध्वज के लिए हर दूसरे विधि की जांच किया है। लेकिन क्या ऐसा करने का एक अच्छा तरीका है?
यहाँ के लिए कोड है नहीं-तो-के बाद से जिस तरह से:
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
क्या आपको त्रुटि के कारण 'foo() 'की आवश्यकता है, या' f2.func1()' ठीक होगा? – Blckknght
@Blckknght, Foo() कारण होने के कारण त्रुटि केवल f2.func1() करने के लिए मामूली रूप से बेहतर होगी – kuzzooroo
आप मैन्युअल रूप से चेक को स्वचालित रूप से लागू करने के लिए सजावट या मेटाक्लास का उपयोग कर सकते हैं। – agf