亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 類的相互依賴關系

Python 類的相互依賴關系

一只斗牛犬 2021-09-11 15:07:32
我有一個 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),子類提供實現。


查看完整回答
反對 回復 2021-09-11
  • 2 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號