how to create class variable dynamically in python

前端 未结 4 1867
再見小時候
再見小時候 2021-01-31 18:12

I need to make a bunch of class variables and I would like to do it by looping through a list like that:

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

class Foo         


        
相关标签:
4条回答
  • 2021-01-31 18:52

    If for any reason you can't use Raymond's answer of setting them up after the class creation then perhaps you could use a metaclass:

    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()
    
    0 讨论(0)
  • 2021-01-31 19:02

    The locals() version did not work for me in a class.

    The following can be used to dynamically create the attributes of the class:

    class namePerson:
        def __init__(self, value):
            exec("self.{} = '{}'".format("name", value)
    
    me = namePerson(value='my name')
    me.name # returns 'my name'
    
    0 讨论(0)
  • 2021-01-31 19:08

    Late to the party but use the type class constructor!

    Foo = type("Foo", (), {k: 0 for k in ("tx", "ty", "tz")})
    
    0 讨论(0)
  • 2021-01-31 19:15

    You can run the insertion code immediately after a class is created:

    class Foo():
         ...
    
    vars=('tx', 'ty', 'tz')  # plus plenty more
    for v in vars:
        setattr(Foo, v, 0)
    

    Also, you can dynamically store the variable while the class is being created:

    class Bar:
        locals()['tx'] = 'texas'
    
    0 讨论(0)
提交回复
热议问题