【问题标题】:Typecast a string as a variable in Python在 Python 中将字符串类型转换为变量
【发布时间】:2015-01-29 04:57:56
【问题描述】:

似乎不可能使用字符串作为变量的名称。我基本上希望程序理解引号内的东西是我要引用的对象的名称。我想做这样的事情:

str = "modname"

import var(str)

var() 是一个虚构的函数。我以使用 str() 或 int() 的方式使用它。我想你可能会问“为什么?”这样我就可以做这样的事情了:

class player:
    __init___():
        attributes = [ "hp", "attack", "defense" ]
        for x in range( 0, len(self.attributes) ]:
            self.var(attributes[x]) = var( attributes[x] + "()" )

(假设您已经完成了类似from stats import * 的操作)。但真正的回报是能够做这样的事情:

for x in range( 0, len(self.attributes) ):
    self.var(attributes[x]).modAttr(-5)
    print self.var(attributes[x]).magnitude

这可能吗?想要这样做完全荒谬吗?还是有不同的、更规范的方式来执行这样的任务?

【问题讨论】:

  • 我想这会有所帮助,但是当应该有办法说 take_off_the_quote_marks('hp') 时,制作像 attributes = { 'hp' : hp, 'attack' : attack } 这样的字典不是很愚蠢吗? (我不认为这是重复的。)
  • “这可能吗?” 是的,这就是getattrsetattr 的用途。 “想要这样做是不是完全荒谬?” 很难说;目前尚不清楚您到底要做什么。您的 player.__init__ 包含 NameError 并且似乎正在尝试为属性分配对自己的调用。另外,为什么要麻烦索引xfor attr in attributes: 更具可读性。
  • 这是我一直在寻找的答案。我只是需要有人把我指向getattr/setattr。谢谢。忽略我的代码质量,这只是一个草率的例子。
  • 该代码应该从字符串列表中动态实例化模块。这很令人困惑,因为我在对象上为实例赋予了相同的名称。原来我的问题实际上是这个问题的副本:stackoverflow.com/questions/4821104/…

标签: python string python-2.7 import casting


【解决方案1】:

我找到了答案。原来它是基于这样的东西。

class whatever:
    list_of_modules = [ "one", "two", "three" ]
    for l in list_of_modules:
        exec ("self.attr_%s = %s()" % ( l, l ))

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多