我有一个类,它将成为许多不同类型变量的容器。集合是有限的,不是很大,所以我没有使用字典。有没有办法根据构造函数中是否请求(指定为 True/False)来自动化或缩短变量的创建?
这是我的例子:
class test:
def __init__(self,a=False,b=False,c=False):
if a: self.a = {}
if b: self.b = 34
if c: self.c = "generic string"
对于在构造函数中为真的 a、b、c 中的任何一个,它们将在对象中创建。
我有一些标准变量(a、b、c、d..)的集合,有些对象将拥有而有些对象则没有。组合的数量太大而无法创建单独的类,但变量的数量不足以在每个类中为它们提供字典。
python有什么办法可以做这样的事情:
class test:
def __init__(self,*args):
default_values = {a:{},b:34,c:"generic string"}
for item in args:
if item: self.arg = default_values[arg]
也许还有另一种方法可以做到这一点?
编辑:
为了澄清这一点,它代表了 2D 表面上不同类型的边界框。根据盒子的功能,它可以有任何框架坐标、内部交叉坐标、id、人口统计数据(附加到该盒子)和一些其他缓存值,以便于计算。
我不想将每个对象都作为字典,因为它附加了一些方法,允许它导出和修改其内部数据并与相同类型的其他对象交互(类似于字符串与 + - .join 交互的方式, ETC。)。我也不想在每个对象中都有一个字典,因为对该变量的调用是不优雅的:
print foo.info["a"]
相对
print foo.a
感谢ballsdotball,我想出了一个解决方案:
class test:
def __init__(self, a=False, b=False,c =False):
default_values = {"a":{},"b":34,"c":"generic string"}
for k, v in default_values.iteritems():
if eval(k): setattr(self,k,v)