Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中动态创建名称空间_Python_Namespaces - Fatal编程技术网

在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
工作正常。你看到了什么问题?即使它有效,但无论如何,它也不应该是实现这一目标的首选方式。