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

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

我可以復(fù)制簡單的對象結(jié)構(gòu)并在 Python 中的類中使用 obj[prop] 選擇表示法嗎?

我可以復(fù)制簡單的對象結(jié)構(gòu)并在 Python 中的類中使用 obj[prop] 選擇表示法嗎?

BIG陽 2023-08-18 17:00:24
從 JavaScript 背景來看,這看起來確實(shí)令人困惑并且不必要地復(fù)雜。但也許我誤解了/錯(cuò)過了一些東西。我只想創(chuàng)建對象,為它們分配和選擇動(dòng)態(tài)命名的屬性,然后打印出它們的結(jié)構(gòu),以便我可以確保結(jié)構(gòu)正確。但對于 Python 來說,我似乎需要對象中額外的結(jié)構(gòu)復(fù)雜性才能做到這一點(diǎn)。在 JavaScript 中,我可以像在 Python 中一樣創(chuàng)建一個(gè)類,或者直接定義它,并且在這兩種情況下對象都具有相同的簡單結(jié)構(gòu):class myObjClass {    constructor() {        this.prop1 = "val1"        this.prop2 = "val2"    }}// directly definedconst myObj1 = {    prop1: "val1"    prop2: "val2"}// defined from classmyObj2 = new myObjClass()// loggedconsole.log(myObj1) // { prop1: "val1", prop2: "val2" }console.log(myObj2) // { prop1: "val1", prop2: "val2" }// dynamically assigned toconst imagineThisNameIsDynamic = "prop3"myObj1[imagineThisNameIsDynamic] = "val3"myObj2[imagineThisNameIsDynamic] = "val3"// dynamically selected frommyObj1[imagineThisNameIsDynamic] // "val3"myObj2[imagineThisNameIsDynamic] // "val3"但在Python中,看起來像這樣做,你不能直接定義一個(gè)Object,只能定義一個(gè)Dictionary:const myObj1 = {    prop1: "val1"    prop2: "val2"}這與對象有根本的不同,因此它不會(huì)等同于從類創(chuàng)建的對象的版本。是的,您可以向類添加魔術(shù)方法,使其行為相似,但不相同。這就是我的問題所在,具體來說:是否可以定義一個(gè)能夠使用 gettermyObj1[prop3]和 setter 表示法而不必將數(shù)據(jù)存儲(chǔ)在子屬性中的類?根據(jù)我在文檔和教程中閱讀的內(nèi)容,要使對象能夠使用該表示法,您必須創(chuàng)建一個(gè)子屬性來設(shè)置/獲取以及傳入/傳出的數(shù)據(jù),如下所示:class myObjClass(object):    def __init__(self):        self.prop1 = "val1"        self.prop2 = "val2"        self.dict= {}    def __getitem__(self, prop):        return self.dict[prop]    def __setitem__(self, prop, val):        self.dict[prop] = val如果我必須這樣做,那么現(xiàn)在當(dāng)我在項(xiàng)目中記錄對象的結(jié)構(gòu)時(shí),我不能擁有像這樣的簡單結(jié)構(gòu):imagineThisNameIsDynamic = "prop3"myObj1 = myObjClass()myObj1[imagineThisNameIsDynamic] = "val3"myPrettyPrintFunc(myObj1) # { prop1: "val1", prop2: "val2", prop3: "val3" }相反,它就像:myPrettyPrintFunc(myObj1) # { prop1: "val1", prop2: "val2", dict: { prop3: "val3" } }除非我想使用本機(jī)函數(shù)setattr/getattr每次需要訪問/定義對象屬性時(shí),我認(rèn)為這會(huì)導(dǎo)致代碼可讀性較差/丑陋,所以我真的更喜歡選擇表示obj[prop]法。這可能看起來不是什么大問題,但在整個(gè)大型項(xiàng)目中,當(dāng)您希望數(shù)據(jù)結(jié)構(gòu)盡可能簡化時(shí),更簡單的對象結(jié)構(gòu)是很好的。那我是不是理解錯(cuò)了?有人請澄清一下
查看完整描述

1 回答

?
LEATH

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

也許您正在尋找getattr?


class Thing:


    def __init__(self):

        self.prop1 = "val1"

        self.prop2 = "val2"


    def __getitem__(self, prop):

        return getattr(self, prop)


t = Thing()


print(t["prop1"])

但是,僅僅有什么問題呢t.prop1?為什么方括號語法如此重要?看起來很主觀。


查看完整回答
反對 回復(fù) 2023-08-18
  • 1 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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