【问题标题】:How to use a string' value as an object name如何使用字符串值作为对象名称
【发布时间】:2019-05-04 01:16:07
【问题描述】:

我正在尝试做这样的事情:

user_id = 12345
"user_id" = user("...")  # "user" is my class
# I want to replace "user_id" with "12345"

有可能吗?

【问题讨论】:

  • 在运行时创建变量名是不好的 Python 风格。动态创建名称的想法是对 Basic 等语言的继承,这些语言没有良好的字典和列表结构。

标签: python string python-2.7 object variables


【解决方案1】:

如果你真的需要这个,你最好用一个字典:

my_objs = {}
user_id = 12345
my_objs[user_id] = User()
print(my_objs)

那么输出将是:

{12345: <__main__.User object at 0x123456789abc>}

您始终可以使用以下任一方法获取对象:

another_id = 12345
my_objs[another_id]

my_objs[12345]

如果你真的非常需要这个但不能使用字典,getattrsetattr 可能会有所帮助:

user_name = "hahaha"
setattr(__import__(__name__), user_name, User())

print(hahaha)

new_name = "hahaha"
assert hahaha is getattr(__import__(__name__), new_name)

这将产生相同的输出并且断言将通过。

请注意,此方法在函数内部无法正常工作,它仅在模块级别有效。

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2014-06-04
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多