第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將基于函數(shù)的數(shù)據(jù)管道轉(zhuǎn)換為 OOP?

如何將基于函數(shù)的數(shù)據(jù)管道轉(zhuǎn)換為 OOP?

慕森王 2023-09-12 17:28:29
我正在做一些數(shù)據(jù)處理,并構(gòu)建了多個(gè)管道,每個(gè)管道都包含多個(gè)函數(shù),這些函數(shù)在每個(gè)步驟中廣泛修改字典。由于不同的管道對(duì)相同的數(shù)據(jù)進(jìn)行操作并具有相似的功能,因此我一直在嘗試將其轉(zhuǎn)換為更面向 OOP 的結(jié)構(gòu)。然而,在我開始之前,我已經(jīng)把自己稍微打結(jié)了。采取以下簡(jiǎn)化示例:for f in foos:    y = extract_y_info(f)    z = extract_z_info(f)    *some code that does something with y and z*    def extract_y_info(f):    return *some code that extracts y info from f*def extract_z_info(f):    return *some code that extracts z info from f*對(duì)我來(lái)說(shuō),似乎有幾種方法可以將其轉(zhuǎn)移到 OOP 結(jié)構(gòu)。第一個(gè)與逐個(gè)功能的方法非常相似。class foo():    def __init__(self, x):        self.x = x    def extract_y_info(self):        return *some code that extracts y info from self.x*    def extract_z_info(self):        return *some code that extracts z info from self.x*for f in foo_instances:    y = b.extract_y_info()    z = b.extract_z_info()    *some code that does something with y and z*另一個(gè)選項(xiàng)是修改類的實(shí)例:class foo():    def __init__(self, x):        self.x = x    def extract_y_info(self):        self.y = *some code that extracts y info from self.x*    def extract_z_info(self):        self.z = *some code that extracts z info from self.x*for f in foo_instances:    f.extract_y_info()    f.extract_z_info()    *some code that does something with f.y and f.z*這些選項(xiàng)中的任何一個(gè)是否比另一個(gè)更好?還有更好的第三種方法嗎?
查看完整描述

1 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

這實(shí)際上取決于您的總體設(shè)計(jì)是什么,以及您期望實(shí)例在任何給定時(shí)間處于什么狀態(tài)以及您對(duì)它的處理方式(換句話說(shuō),屬性本身的存在是否有意義,但是......前者似乎通常更y安全我。你調(diào)用并獲得一個(gè)值,你不必跟蹤,我是否調(diào)用了該方法以及這個(gè)或那個(gè)屬性處于什么狀態(tài)?但請(qǐng)注意,你應(yīng)該真正在構(gòu)造函數(shù)中定義實(shí)例屬性,否則訪問可能不僅令人驚訝,而且是致命的(AttributeError)。


現(xiàn)在,解決上述一些問題并且可能適合您在此處訪問值的操作的簡(jiǎn)潔解決方案可能是 property ,它本質(zhì)上允許您訪問方法返回的值,就好像它是實(shí)例屬性一樣:


class foo():

? ? def __init__(self, x):

? ? ? ? self.x = x


? ? def extract_y_info(self):

? ? ? ? return #some code that extracts y info from self.x


? ? y = property(extract_y_info)? ? ?


for f in foo_instances:

? ? print(f"value of f.y = {f.y}")

property或者您可以使用方法裝飾器執(zhí)行相同的操作:


? ? @property

? ? def y(self):

? ? ? ? return #some code that extracts y info from self.x

如果獲取y成本昂貴且其值在實(shí)例的整個(gè)生命周期內(nèi)不會(huì)改變,從 Python 3.8 開始,您還可以使用cached_property.



查看完整回答
反對(duì) 回復(fù) 2023-09-12
  • 1 回答
  • 0 關(guān)注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)