2 回答
TA贡献1796条经验 获得超4个赞
Python 没有提供通过文字或显示* 来引用正在构造的对象的方法。您可以(ab)使用Python 3.8或更高版本中的赋值表达式来模拟这一点:
a_dictionary = {
"key_1": (x := "value_1"),
"key_2": (y := "value_2"),
"key_3": x + "_" + y
}
它需要提前进行一些规划,因为您不是直接引用键值,而是引用预定义的变量。请注意,在分配给 后,x和仍保留在范围内,因此这只是一个有问题的等价物ya_dictionary
x = "value_1"
y = "value_2"
a_dictionary = {
"key_1": x,
"key_2": y,
"key_3": x + "_" + y
}
自定义类确实更合适:
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")
显示是类似于文字的构造,但可以包含非文字引用。例如,列表显示包括[1, x, y]和[int(x) for x in foo]。
TA贡献1829条经验 获得超7个赞
经过一番挖掘,并且仅针对字典的情况,我发现了其他解决方法,基于当我需要自引用字典时我该怎么做?:
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 关注
- 123 浏览
添加回答
举报