我在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'。 有可能吗?
由于
答案 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())