I have a context manager that keeps track of time:
import time
class Timer:
'''A rudimentary context manager for keeping track of running time'''
def __enter__(self):
self.timer = time.time()
self.state = 1
return self
def __exit__(self, exc_type, exc_value, traceback):
self.timer = time.time() - self.timer
self.state = 0
def __float__(self):
if self.state:
return time.time() - self.timer
else:
return self.timer
def __int__(self):
return int(float(self))
def __str__(self):
return str(float(self))
def __format__(self, format_spec):
return format(float(self), format_spec)
Clearly, the following is a legitimate use case
def test():
with Timer() as t:
time.sleep(1)
print(f'Time elapsed {t:.2f}s')
My question is, in my case is it safe to use the context manager object after the with
statement has exited? Say,
def test():
with Timer() as t:
time.sleep(1)
print(f'Time elapsed {t:.2f}s')
return t