【问题标题】:How to make getattr() and __dict__ take str() argument?如何使 getattr() 和 __dict__ 采用 str() 参数?
【发布时间】:2022-01-04 23:07:26
【问题描述】:

使用代码:

class Values():
    # class for storing values
    value_1 = None

print(Values.value_1)
print(getattr(Values, 'value_1'))

我能够得到输出:

None
None

但是当尝试使用此代码时,它对其中任何一个都不起作用:

print(Values.__dict__.get(str(value_1)))
print(getattr(Values, str(value_1)))
print(Values.__dict__[str(value_1)])

我得到输出:

NameError: name 'value_1' is not defined

我正在尝试以这种方式访问​​该属性以用于未来的项目,而其他两种方式还不够。非常感谢任何帮助

【问题讨论】:

  • 不太清楚你在问什么。错误告诉您名称未定义且正确。而是使用:print(Values.__dict__.get('value_1')),它按预期工作。在 str() 中包装未定义的名称不会使其成为字符串。很难想象你可以写str(value_1)这样的代码却不能写'value_1'这样的情况。
  • 除了引号之外,有什么方法可以使它成为字符串吗?如何传递与 value_1 同名的变量以获得输出 None?
  • 您只需定义变量:some_var = 'value_1'。然后你可以使用它Values.__dict__.get(some_var)
  • 如果我有一组值,即 value_1、value_2、value_3 等都是 Values() 的属性,那仍然是最好的方法吗?谢谢
  • 如果您订购了value_1value_2 等名称,听起来最好的方法是列表:values = ['a', 'b', 'c'] 然后您只需访问它们values[0], values[1]...等。

标签: python class dictionary attributes getattr


【解决方案1】:

value_1 没有定义,需要加引号。
这里:

print(Values.__dict__.get(str(value_1)))
print(getattr(Values, str(value_1)))
print(Values.__dict__[str(value_1)])

您的行为好像value_1 是一个预定义的变量。如果没有环境变量或您定义的变量,您就不能在 python 中使用随机文本。
这个:

print(Values.__dict__.get(str('value_1')))
print(getattr(Values, str('value_1')))
print(Values.__dict__[str('value_1')])

会起作用的。
这个:

value_1 = 'value_1'
print(Values.__dict__.get(str(value_1)))
print(getattr(Values, str(value_1)))
print(Values.__dict__[str(value_1)])

也可以。

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2011-11-21
    • 2011-09-13
    • 2019-12-02
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多