是否有一种 Pythonic 方式来引用我们用(某些)Python 内置类型声明的当前对象?

使用(某些)Python 内置类型,是否可以引用我们正在声明的对象?通过“(某些)内置类型”,我想到的是序列类型、映射类型或集合类型,显然不是数字类型。


我的意思是,无需自己创建类并添加此功能(无需创建子类)。


因此,类似于this下面示例中使用的关键字。


例如,对于“dict”Python 内置类型,如下所示:


a_dictionary = {

    "key_1": "value_1",

    "key_2": "value_2",

    "key_3": this["key_1"] + "_" + this["key_2"] # == "value_1_value_2"

}

甚至:


a_dictionary = {

    "sub_dict_1": {

        "key_1": "value_1_1",

        "key_2": "value_1_2",

        "key_3": this["key_1"] + "_" + this["key_2"] # == "value_1_1_value_1_2"

    },

    "sub_dict_2": {

        "key_1": "value_2_1",

        "key_2": "value_2_2",

        "key_3": this["key_1"] + "_" + this["key_2"] # == "value_2_1_value_2_2"

    }

}


大话西游666
浏览 79回答 2
2回答

慕的地8271018

Python 没有提供通过文字或显示* 来引用正在构造的对象的方法。您可以(ab)使用Python 3.8或更高版本中的赋值表达式来模拟这一点:a_dictionary = {    "key_1": (x := "value_1"),    "key_2": (y := "value_2"),    "key_3": x + "_" + y }它需要提前进行一些规划,因为您不是直接引用键值,而是引用预定义的变量。请注意,在分配给 后,x和仍保留在范围内,因此这只是一个有问题的等价物ya_dictionaryx = "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 + "_" + v2a_thing = Thing("value_1", "value_2")显示是类似于文字的构造,但可以包含非文字引用。例如,列表显示包括[1, x, y]和[int(x) for x in foo]。

吃鸡游戏

经过一番挖掘,并且仅针对字典的情况,我发现了其他解决方法,基于当我需要自引用字典时我该怎么做?: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"})
打开App,查看更多内容
随时随地看视频慕课网APP