在Python中动态创建名称空间
我想用动态创建的属性创建一个对象(比如在Python中动态创建名称空间,python,namespaces,Python,Namespaces,我想用动态创建的属性创建一个对象(比如foo)。我可以这样做: class Foo: pass foo.bar = 42 ... print(foo.bar) # 42 def createFoo(attributeName): foo = ??? ??? = 42 ... foo = createFoo("bar") print(foo.bar) # 42 但是,当我创建属性时,我还不知道属性的名称。我需要的是这样的东西: class Foo: pas
foo
)。我可以这样做:
class Foo:
pass
foo.bar = 42
...
print(foo.bar) # 42
def createFoo(attributeName):
foo = ???
??? = 42
...
foo = createFoo("bar")
print(foo.bar) # 42
但是,当我创建属性时,我还不知道属性的名称。我需要的是这样的东西:
class Foo:
pass
foo.bar = 42
...
print(foo.bar) # 42
def createFoo(attributeName):
foo = ???
??? = 42
...
foo = createFoo("bar")
print(foo.bar) # 42
我怎样才能做到这一点呢?你可以用字典 然后创建一个get函数来轻松访问它
def createFoo(attributeName):
dict[attributeName] = 42;
def GetVal(attributeName)
return dict[attributeName];
...
foo = createFoo("bar")
print(foo.GetVal("bar")) # 42
你可以用字典 然后创建一个get函数来轻松访问它
def createFoo(attributeName):
dict[attributeName] = 42;
def GetVal(attributeName)
return dict[attributeName];
...
foo = createFoo("bar")
print(foo.GetVal("bar")) # 42
:
或者,正如我在shmee建议setattr之前最初回答的那样:
foo = Foo()
foo.__dict__['man'] = 3.14
print(foo.man) # 3.14
:
或者,正如我在shmee建议setattr之前最初回答的那样:
foo = Foo()
foo.__dict__['man'] = 3.14
print(foo.man) # 3.14
我不太明白。在函数内部,
foo=?
正在创建实例?(例如,foo=foo()
)。那么这个值(42)是从哪里来的呢?为什么它不作为参数传递给createFoo
?这个问题不是重复的吗?我不太明白。在函数内部,foo=?
正在创建实例?(例如,foo=foo()
)。那么这个值(42)是从哪里来的呢?为什么它不作为参数传递给createFoo
?这个问题不是重复的吗?您可以执行setattr(foo,“bar”,42)
而不是手动更改实例的\uuuu dict\uuuu
实际上,设置\uu dict\uuu
不起作用(至少在Pyhton 3中不起作用)<代码>setattr工作正常。我使用的是Python 3和\uuuu dict\uuu
工作正常。你看到了什么问题?尽管它可以工作,但它确实不应该是实现这一点的首选方式。您可以使用setattr(foo,“bar”,42)
而不是手动更改实例的\uuuuudict\uuuuuu
实际上,设置\uudict\uuuuuuu
不起作用(至少在Pyhton 3中不起作用)<代码>setattr工作正常。我使用的是Python 3和\uuuu dict\uuu
工作正常。你看到了什么问题?即使它有效,但无论如何,它也不应该是实现这一目标的首选方式。