python中逐步对象操作的最佳类结构实践
嗨,我想创建一个具有多个方法的类。每种方法取决于另一种方法的结果。一个简化的示例如下所示:python中逐步对象操作的最佳类结构实践,python,class,syntax,Python,Class,Syntax,嗨,我想创建一个具有多个方法的类。每种方法取决于另一种方法的结果。一个简化的示例如下所示: class klass(object): def __init__(self, x, y): self.x = x self.y = y self.results = 0 def method1(self): self.results = self.x + self.y return self.results def method2(self): sel
class klass(object):
def __init__(self, x, y):
self.x = x
self.y = y
self.results = 0
def method1(self):
self.results = self.x + self.y
return self.results
def method2(self):
self.results = math.sqrt(self.results)
return self.results
method2应仅在method1之后调用。i、 e:
这个想法是,有人可能只需要方法1的结果,而其他人也可能需要方法2的结果。所以第一个人只需要运行method1,第二个人需要运行method1,然后运行method2
什么是最好的可读性和最简单的方法来做到这一点
请注意,这是一个复杂类的简单得多的版本如果我弄错了,请纠正我的错误,但您不能像这样在method2中调用method1:
def method2(self):
self.method1()
self.results = math.sqrt(self.results)
return self.results
我会将结果切换为字典,并分别保存每个级别的结果。然后,如果level1不在self中,则可以签入每个方法。results:引发异常,但仍然可以向用户提供每个级别的输出。此外,您可以通过检查结果是否已经存在来启动每个方法。例如:
class klass(object):
def __init__(self, x, y):
self.x = x
self.y = y
self.results = {"level0": 0}
def method1(self):
if "level1" not in self.results:
self.results["level1"] = self.x + self.y
return self.results["level1"]
def method2(self):
if "level1" not in self.results:
raise ValueError("The results of method1 are not yet available")
if "level2" not in self.results:
self.results["level2"] = math.sqrt(self.results["level1"])
return self.results["level2"]
注意:不要使用klass这个名字,你可以在一个地方编写单独的函数来聚合你需要的函数:
class klass(object):
def __init__(self, x, y):
self.x = x
self.y = y
self.results = 0
def method1(self):
self.results = self.x + self.y
return self.results
def method2(self):
self.results = math.sqrt(self.results)
return self.results
def both_methods(self):
self.method1()
self.method2()
return self.results
是的,没错。但这会减慢我的代码速度。i、 e如果有人需要method1,过了一段时间也需要method2,最好不要再运行method1,因为它已经计算并保存了。但这只是在执行method1时设置的布尔变量的快速检查,对吗?
class klass(object):
def __init__(self, x, y):
self.x = x
self.y = y
self.results = 0
def method1(self):
self.results = self.x + self.y
return self.results
def method2(self):
self.results = math.sqrt(self.results)
return self.results
def both_methods(self):
self.method1()
self.method2()
return self.results