我想為類提供方法,以便將其轉換為由子類表示的特殊情況。我不確定,但是最好的方法是什么。
這是一個說明性示例:
class Vector(pd.Series):
def normalize(self) -> "NormalizedVector":
result: "NormalizedVector" = self / sum(self) # type:ignore
return result
class NormalizedVector(Vector):
pass
但是,此實作存在問題:
isinstance(vector.normalize(), NormalizedVector)將會False- (相關)
# type: ignore注解是靜態型別檢查所必需的
所以我的問題是:實作這一目標的干凈方法是什么?
我發現的替代方法是使用動態分配:
class Vector(pd.Series):
pass
class NormalizedVector(Vector):
pass
def normalize_vector(self: Vector) -> NormalizedVector:
return NormalizedVector(self / sum(self))
Vector.normalize = normalize_vector
然而:
- 我發現它使代碼的可讀性大大降低
- 恐怕會弄亂最終方法元資料,例如
__name__
uj5u.com熱心網友回復:
單獨的型別提示不會導致值成為提示型別。您需要創建一個實體。您的第二種方法有效,因為您實際上創建了該實體。顯式分配是不必要的。
class Vector(pd.Series):
def normalize(self) -> "NormalizedVector":
return NormalizedVector(self / sum(self))
class NormalizedVector(Vector):
pass
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408682.html
標籤:
