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

Riv*_*ers 3 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"
}
Run Code Online (Sandbox Code Playgroud)

甚至:

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"
    }
}
Run Code Online (Sandbox Code Playgroud)

我读了 :

在python中进行函数链接时,有没有办法引用“当前”对象?

当我需要一本自参考字典时我该怎么办?

参考字典本身

python中的自引用类?

有没有办法在python中引用当前函数?

在 Python 中进行列表/字典理解时是否可以访问当前对象?

和其他一些,但它与我的问题开头描述的要求不符。

非常感谢你的帮助!

che*_*ner 8

Python 没有提供通过文字或显示来引用正在构建的对象的方法*。您可以(ab)使用 Python 3.8 或更高版本中的赋值表达式来模拟:

a_dictionary = {
    "key_1": (x := "value_1"),
    "key_2": (y := "value_2"),
    "key_3": x + "_" + y 
}
Run Code Online (Sandbox Code Playgroud)

它需要提前进行一些计划,因为您不是直接引用键值,而是一个预定义的变量。请注意,在分配给 之后xy仍然在范围内a_dictionary,所以这只是一个有问题的等价物

x = "value_1"
y = "value_2"
a_dictionary = {
    "key_1": x,
    "key_2": y,
    "key_3": x + "_" + y
}
Run Code Online (Sandbox Code Playgroud)

自定义类确实更合适:

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")
Run Code Online (Sandbox Code Playgroud)
  • 显示是一种类似于文字的结构,但可以包含非文字引用。例如,列表显示包括[1, x, y][int(x) for x in foo]

  • 作为否定,很难找到对事实的明确陈述。Python 没有提供“很多”东西;文档中没有列举它们。 (2认同)