我有一个基类,其方法使用语句with。在子类中,我重写相同的方法,然后希望访问相同的with语句(而不是有两个with语句)。
解决这个问题的标准方法是什么?
有关示例和可能的解决方案,请参见下文。
样品使用threading.Lock
from threading import Lock
class BaseClass:
def __init__(self):
self.lock = Lock()
self._data = 0
def do_something_locked(self) -> None:
with self.lock:
self._data += 5
class ChildClass(BaseClass):
def do_something_locked(self) -> None:
super().do_something_locked()
# Obviously the parent class's self.lock's __exit__ method has
# already been called. What are accepted methods to add more
# functionality inside parent class's "with" statement?
with self.lock:
self._data += 1
可能的解决方案
我的第一个倾向是定义一个私有方法,如下BaseClass所示:
def do_something_locked(self) -> None:
with self.lock:
self._do_something()
def _do_something(self) -> None:
self._data += 5
然后就ChildClass可以覆盖_do_something. 这会工作得很好。
我想知道,还有其他常见的模式来解决这个问题吗?
慕勒3428872
千巷猫影
相关分类