Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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_Class_Class Variables - Fatal编程技术网

如何在python中动态创建类变量

如何在python中动态创建类变量,python,class,class-variables,Python,Class,Class Variables,我需要创建一组类变量,我想通过循环遍历这样的列表来实现: vars=('tx','ty','tz') #plus plenty more class Foo(): for v in vars: setattr(no_idea_what_should_go_here,v,0) 可能吗?我不想将它们作为实例(在uuu init_uuu中使用self),而是作为类变量。创建类后,可以立即运行插入代码: class Foo(): ... vars=('tx', '

我需要创建一组类变量,我想通过循环遍历这样的列表来实现:

vars=('tx','ty','tz') #plus plenty more

class Foo():
    for v in vars:
        setattr(no_idea_what_should_go_here,v,0)

可能吗?我不想将它们作为实例(在uuu init_uuu中使用self),而是作为类变量。

创建类后,可以立即运行插入代码:

class Foo():
     ...

vars=('tx', 'ty', 'tz')  # plus plenty more
for v in vars:
    setattr(Foo, v, 0)
此外,您还可以在创建类时动态存储变量:

class Bar:
    locals()['tx'] = 'texas'

如果出于任何原因,您不能使用Raymond在类创建后设置它们的答案,那么您可能可以使用元类:

class MetaFoo(type):
    def __new__(mcs, classname, bases, dictionary):
        for name in dictionary.get('_extra_vars', ()):
            dictionary[name] = 0
        return type.__new__(mcs, classname, bases, dictionary)

class Foo(): # For python 3.x use 'class Foo(metaclass=MetaFoo):'
    __metaclass__=MetaFoo # For Python 2.x only
    _extra_vars = 'tx ty tz'.split()

晚会迟到了,但请使用

locals()
版本在类中不适用于我

以下内容可用于动态创建类的属性:

class namePerson:
    def __init__(self, value):
        exec("self.{} = '{}'".format("name", value)

me = namePerson(value='my name')
me.name # returns 'my name'

为什么不将它们保存在dict中?是否要在不同实例之间共享这些变量?不确定。很有可能。这个需求来自一个API,我不知道它们在那里是如何使用的。那很酷。我将试一试,看看我使用的API是否能够处理这个问题。谢谢你,伙计!这将不起作用,因为您的解决方案已硬编码了
\u extra\u vars
@MSS的值。您不必使用
'tx ty tz'。split()
,您可以替换您自己的表达式,该表达式可以引用变量。
class namePerson:
    def __init__(self, value):
        exec("self.{} = '{}'".format("name", value)

me = namePerson(value='my name')
me.name # returns 'my name'