從 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ò)了?有人請澄清一下
我可以復(fù)制簡單的對象結(jié)構(gòu)并在 Python 中的類中使用 obj[prop] 選擇表示法嗎?
BIG陽
2023-08-18 17:00:24