[英]Best class structure practice for step by step object manipulation in python
嗨,我想用多種方法創建一個類。 每種方法取決於另一種方法的結果。 一個簡化的示例如下所示:
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 。
什么是最好的(最易讀和最簡單)的方法。
請注意,這是復雜類的簡單得多的版本
我會將結果切換為字典,然后分別保存每個級別的結果。 然后,您可以檢入每個方法中的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"]
PS不要使用klass
這個名字
如果我弄錯了,請更正我,但是您不能像這樣在method2中僅調用method1:
def method2(self):
self.method1()
self.results = math.sqrt(self.results)
return self.results
您可以編寫單獨的函數以在單個位置聚合所需的函數:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.