您好我想用多种方法创建一个类。每种方法都取决于另一种方法的结果。一个简化的例子如下:
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 之后调用。即:
>>> b=klass(3.0, 4.0)
>>> b.method1()
7.0
>>> b.method2()
2.6457513110645907
这个想法是有人可能只需要 method1 的结果,而其他人也可能需要 method2 的结果。所以第一个人只需要运行 method1 ,第二个人需要运行 method1 然后 method2 。
最好(最可读和最简单)的方法是什么。
请注意,这是复杂类
的更简单版本答案 0 :(得分:1)
我会将结果切换为字典并分别保存每个级别的结果。然后,您可以检入每个方法if "level1" not in self.results: raise an exception
,但是您仍然可以向用户提供每个级别的输出。此外,您可以通过检查结果是否已存在来启动每个方法。一个例子就是这样:
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"]
P.S。请勿使用名称klass
答案 1 :(得分:0)
如果我弄错了,请纠正我,但你不能像这样在方法2中调用method1:
def method2(self):
self.method1()
self.results = math.sqrt(self.results)
return self.results
答案 2 :(得分:0)
您可以编写单独的函数来在一个位置聚合所需的函数:
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