如何创建可变数量的变量?

如何在Python中完成变量变量?

例如,这是详尽的手动输入:变量变量

我听说这通常是个坏主意,这是Python中的一个安全漏洞。真的吗?

宝儿理查德2020/05/28 15:06:48

我正在回答这个问题:如何在字符串中给定变量名的情况下获取变量的值? 将其作为重复项关闭并带有此问题的链接。

如果所讨论的变量是一个对象(例如一个类的一部分)的一部分,那么一些有用的功能,以实现准确是hasattrgetattr,和setattr

因此,例如,您可以拥有:

class Variables(object):
    def __init__(self):
        self.foo = "initial_variable"
    def create_new_var(self,name,value):
        setattr(self,name,value)
    def get_var(self,name):
        if hasattr(self,name):
            return getattr(self,name)
        else:
            raise("Class does not have a variable named: "+name)

然后,您可以执行以下操作:

v = Variables()
v.get_var("foo")

“ initial_variable”

v.create_new_var(v.foo,"is actually not initial")
v.initial_variable

“实际上不是最初的”

小次郎2020/05/28 15:06:47

每当您想使用变量变量时,最好使用字典。所以不要写

$foo = "bar"
$$foo = "baz"

你写

mydict = {}
foo = "bar"
mydict[foo] = "baz"

这样,您就不会意外覆盖先前存在的变量(这是安全方面),并且您可以拥有不同的“命名空间”。

卡卡西Near2020/05/28 15:06:47

SimpleNamespace类可用于创建新的属性setattr,或继承SimpleNamespace并创建自己的功能,增加新的属性名称(变量)。

from types import SimpleNamespace

variables = {"b":"B","c":"C"}
a = SimpleNamespace(**variables)
setattr(a,"g","G")
a.g = "G+"
something = a.a