2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
Python 沒(méi)有提供通過(guò)文字或顯示* 來(lái)引用正在構(gòu)造的對(duì)象的方法。您可以(ab)使用Python 3.8或更高版本中的賦值表達(dá)式來(lái)模擬這一點(diǎn):
a_dictionary = {
"key_1": (x := "value_1"),
"key_2": (y := "value_2"),
"key_3": x + "_" + y
}
它需要提前進(jìn)行一些規(guī)劃,因?yàn)槟皇侵苯右面I值,而是引用預(yù)定義的變量。請(qǐng)注意,在分配給 后,x和仍保留在范圍內(nèi),因此這只是一個(gè)有問(wèn)題的等價(jià)物ya_dictionary
x = "value_1"
y = "value_2"
a_dictionary = {
"key_1": x,
"key_2": y,
"key_3": x + "_" + y
}
自定義類(lèi)確實(shí)更合適:
class Thing:
def __init__(self, v1, v2):
self.key_1 = v1
self.key_2 = v2
self.key_3 = v1 + "_" + v2
a_thing = Thing("value_1", "value_2")
顯示是類(lèi)似于文字的構(gòu)造,但可以包含非文字引用。例如,列表顯示包括[1, x, y]和[int(x) for x in foo]。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
經(jīng)過(guò)一番挖掘,并且僅針對(duì)字典的情況,我發(fā)現(xiàn)了其他解決方法,基于當(dāng)我需要自引用字典時(shí)我該怎么做?:
class MyDict(dict):
? ? def __getitem__(self, item):
? ? ? ? return dict.__getitem__(self, item).format(self)
a_dictionary = MyDict({
? ? "key_1": "value_1",
? ? "key_2": "value_2",
? ? "key_3": "{0[key_1]}" + "_" + "{0[key_2]}" # == "value_1_value_2"
})
- 2 回答
- 0 關(guān)注
- 219 瀏覽
添加回答
舉報(bào)