我有一個 python 類,用作進一步子類的基類。它包含一個方法,應該對所有子類采取相同的操作,例如我想把它放在基類中。問題是,這個方法應該返回子類的一個新實例。但是我因為基類位于子類的定義之前,所以我不能創建子類的新實例,因為它在基類的范圍內是未知的:class Base: def __init__(self, value): self.value = value def convert_child_classes(self, newclass): newvalue = MakeUsableInNewclass(self.value) newattr = MakeUsableInNewclass(self.subclassattr) return newclass(newattr, newvalue)class Child1(Base): def __init__(self, subclassattr, value) super(Child, self).__init__(value) self.subclassattr = subclassattr def MethodForSubClassAttr(self): ...do sth with self.subclassattr...class Child2(Base): def __init__(self, subclassattr, value) super(Child, self).__init__(value) self.subclassattr = subclassattr def SomeOtherSubClassAttrMethod(self): ...do sth that is related to this class attr...如果我有一個 Child1 的實例,我希望能夠用它的數據做一些事情,然后在調用 convert_child_classes(Child2) 時返回一個帶有新值的 Child2 的實例:A = Child1('someattr', 5)B = A.convert_child_classes(Child2)現在 B 應該是 Child2 的一個實例,其值是從 Child1 計算出來的。但是由于 Base 類現在知道 Child1 或 Child2 是什么,它無法啟動新類。
2 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
這樣的事情應該工作(未經測試):
class Measurement:
@classmethod
def from_other(cls, other):
base = other.convert_to_base_unit()
converted = cls.base_to_unit(base)
return cls(converted)
@classmethod
def base_to_unit(cls, value):
# Let the subclass implement this
raise NotImplementedError
def convert_to_base_unit(self):
# Let the subclass implement this
raise NotImplementedError
以這種方式實現,基類不需要了解子類的任何信息?;愄峁┠0宸椒?( from_other),子類提供實現。
添加回答
舉報
0/150
提交
取消