为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
大话西游666 2023-11-09 10:11:43
使用(某些)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"    }}
查看完整描述

2 回答

?
慕的地8271018

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]。


查看完整回答
反对 回复 2023-11-09
?
吃鸡游戏

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"

})


查看完整回答
反对 回复 2023-11-09
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信