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