我有一個繼承三個子類的超類。超類包含一個方法,其輸出變數取決于呼叫該方法的子類。下面,您將看到一個示例,其中我為方法提供了一個引數以指示要生成的輸出。
def dimensionality_reduction(self, algorithm, sparse_weighted_matrix, factors):
ut, _, v = sparsesvd(sparse_weighted_matrix, factors)
if algorithm == 'a':
return ut
elif algorithm = 'b':
return v
else:
raise Exception('Invalid algorithm selected')
相反,我希望這個超類方法能夠識別從哪個子類呼叫該方法。
我正在考慮類似的事情:
def dimensionality_reduction(self, sparse_weighted_matrix, factors):
ut, _, v = sparsesvd(sparse_weighted_matrix, factors)
if subclass == 'method_a':
return ut
elif subclass = 'method_b':
return v
else:
raise Exception('Invalid algorithm selected')
有沒有辦法做到這一點?
uj5u.com熱心網友回復:
老實說,讓超類的方法知道它是從哪個子類執行的,這聽起來像是一種反模式。至少,這意味著每次添加子類時都必須調整超類。教科書的解決方案是將這些細節移動到子類覆寫的方法中。例如:
class Superclass:
def handle_sparsesvd_result(self, result):
# Must be overridden by subclasses
raise Exception('Invalid algorithm selected')
def dimensionality_reduction(self, algorithm, sparse_weighted_matrix, factors):
result = sparsesvd(sparse_weighted_matrix, factors)
return self.handle_sparsesvd_result(result)
class SubClassA(SuperClass):
def handle_sparsesvd_result(self, result):
return result[0]
class SubClassB(SuperClass):
def handle_sparsesvd_result(self, result):
return result[2]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/325647.html
上一篇:子建構式使用祖父建構式
