gpt4 book ai didi

python - 引用定义中其他类属性的字典类属性

转载 作者:行者123 更新时间:2023-11-28 22:41:51 26 4
gpt4 key购买 nike

虽然有很多方法可以解决这个问题,但由于性格缺陷,在我了解失败的本质之前我不能放手。

正在尝试:

class OurFavAnimals(object):
FAVE = 'THATS ONE OF OUR FAVORITES'
NOTFAVE = 'NAH WE DONT CARE FOR THAT ONE'
UNKNOWN = 'WHAT?'
FAVES = defaultdict(lambda: UNKNOWN, {x:FAVE for x in ['dog', 'cat']})
FAVES['Crab'] = NOTFAVE

失败:

      3     NOTFAVE = 'NAH WE DONT CARE FOR THAT ONE'
4 UNKNOWN = 'WHAT?'
----> 5 FAVES = defaultdict(lambda: UNKNOWN, {x:FAVE for x in ['dog', 'cat']})
6 FAVES['Crab'] = NOTFAVE

NameError: global name 'FAVE' is not defined

为什么?为什么它能找到 UNKNOWN 但找不到 FAVE?是因为它在字典理解中吗?

最佳答案

是的,这是因为它在字典理解中。请注意,它也不是“发现”UNKNOWN;它只是还没有寻找它,因为 UNKNOWN 仅在 lambda 中被引用。如果你用其他东西替换你的字典理解以允许类定义成功,如果你稍后尝试访问一个不存在的键(因为它会尝试调用那个 lambda),你会得到一个错误。所以如果你把它改成

FAVES = defaultdict(lambda: UNKNOWN, {'a': 1})

你会得到:

>>> OurFavAnimals.FAVES['x']
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
OurFavAnimals.FAVES['x']
File "<pyshell#2>", line 5, in <lambda>
FAVES = defaultdict(lambda: UNKNOWN, {'a': 1})
NameError: global name 'UNKNOWN' is not defined

在这两种情况下,原因是在类作用域中定义的变量在嵌套作用域中不可用。换句话说,这与失败的原因相同:

class Foo(object):
something = "Hello"
def meth(self):
print(something)

lambda 和字典理解都创建了嵌套在类作用域中的函数作用域,因此它们无法直接访问类变量。另见 this related question .

关于python - 引用定义中其他类属性的字典类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32257783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com