我有一个包含
@property
的类,如果在从另一个函数设置该函数之前访问该属性,则希望引发 RuntimeError
。我现在的问题是,当我在 ProcessManager
中使用此类时,在构建此管理器时会自动调用该属性,导致始终引发错误。我该如何解决这个问题?
我的代码如下:
from multiprocessing.managers import BaseManager
class TestProvider:
def __init__(self):
self.__result = None
def calculate(self, i1, i2):
self.__result = i1 + i2
@property
def result(self):
if not self.__result:
raise RuntimeError("Tried to access property which is Not calculated")
return self.__result
if __name__ == "__main__":
BaseManager.register("TestProvider", TestProvider)
manager = BaseManager()
manager.start()
provider = manager.TestProvider()
我可能不知道适合您情况的正确/更好的解决方案,但我有一个想法。
使用标志来触发“if”第一次运行的条件。
from multiprocessing.managers import BaseManager
# Initial variables
RuntimeStartFlag = 0
class TestProvider:
def __init__(self):
self.__result = None
def calculate(self, i1, i2):
self.__result = i1 + i2
@property
def result(self):
if not self.__result and RuntimeStartFlag:
raise RuntimeError("Tried to access property which is Not calculated")
return self.__result
if __name__ == "__main__":
BaseManager.register("TestProvider", TestProvider)
manager = BaseManager()
manager.start()
provider = manager.TestProvider()
RuntimeStartFlag = 1
# Continue testing after setting the "RuntimeStartFlag"...
注意:我不确定这是否正确,可能有更好的解决方案,我刚刚想出了一个快速解决方案。 请随意亲自测试一下,如果我做错了什么,请告诉我。