python:将变量名称传递给类

时间:2016-05-02 13:54:22

标签: python

我在module1.py文件中定义了一个python类:

class MBVar():
    def __init__(self, var_type, expression):
            self.var_type = var_type
            self.expression = expression
            ... ecc ...

我希望能够在主* .py文件中写入:

from module1 import MBVar
X = MBVar('integer', 6)

并添加到我的MBVar类:

self.name = ???

以这样的方式:self.name =' X'。 有可能吗?

由于

2 个答案:

答案 0 :(得分:0)

所以我假设您想要将变量名和值作为参数传递并将其分配给对象,为此我们不需要变量的类型,因为python使用duck typing我们只需要添加字符串将内置字典__dict__中的变量名称表示为键,将整数表示为值。

class MBVar():
    def __init__(self, var_name, expression):
        self.__dict__[var_name] = expression

    def add_later(self, var_name, expression):
        self.__dict__[var_name] = expression

    def get_name(self):
        return self.name


X = MBVar('name', 6)
print X.get_name() # prints 6
X.add_later('secint',4);
print X.secint #prints 4
X.__dict__['thirdint'] = 7
print X.thirdint #prints 7

答案 1 :(得分:0)

我有一个解决方案,但我不认为这是一个非常好的编码实践。此外,它是一个两步的过程:它不能在__init__方法内完成,因为直到此方法结束,该对象尚未与变量关联。

class Foo:
    def __init__(self):
      self.__name = ""

    def set_name(self, name):
      self.__name = name

    def get_name(self):
      return self.__name

if __name__ == "__main__":
    a = Foo()
    b = Foo()
    c = Foo()

    dict_v = locals()

    v = "" 
    # this line initialize the variable of name "v" because of its entry in the locals() dict 
    #-> prevent "RuntimeError: dictionary changed size during iteration "

    for v in dict_v.keys():
      if isinstance(dict_v[v], Foo):
        # the process only happens for the objects of a specific class
        dict_v[v].set_name(v)

    #proof
    print(a.get_name())
    print(b.get_name())
    print(c.get_name())