如何通过列表创建多个属性,例如:
我的代码:
class test():
def __init__(self, name):
pass...
def test2(self, lista):
但是在这种方法中,我创建了一个对象(列表的最后一个元素。 如何创建多个self.ris以生成多个对象?
答案 0 :(得分:1)
使用setattr
将属性名称设置为变量:
class pkg():
def __init__(self, name):
self.name = name
lista_ = self.dai_lista(lista)
print lista_
for i in lista_:
i = i.rstrip()
setattr(self, 'ris'+i, riso(i))
def dai_lista(self, lista):
print "sono in dai lista"
return lista
class riso():
def __init__(self, nome):
self.nome = nome
def print_nome(self):
print self.nome
lista = ['a', 'b', 'c' ]
pippo = pkg('pippo')
pippo.risa.print_nome()
pippo.risb.print_nome()
pippo.risc.print_nome()
输出:
sono in dai lista
['a', 'b', 'c']
a
b
c
但是,尽管这可行,但我还是认为动态创建实例属性是不明智的做法。相反,您应该使用字典来存储这些类:
class pkg():
def __init__(self, name):
self.name = name
lista_ = self.dai_lista(lista)
print lista_
self.ris = {}
for i in lista_:
i = i.rstrip()
self.ris[i] = riso(i)
def dai_lista(self, lista):
print "sono in dai lista"
return lista
class riso():
def __init__(self, nome):
self.nome = nome
def print_nome(self):
print self.nome
lista = ['a', 'b', 'c' ]
pippo = pkg('pippo')
pippo.ris['a'].print_nome()
pippo.ris['b'].print_nome()
pippo.ris['c'].print_nome()
输出与您使用过的属性相同。
答案 1 :(得分:0)
您可以创建一个像这样的方法:
def make_attrs(self, *lista):
for l in lista:
setattr(self, l, None)
None
将为您初始化值。如果要创建键值对,则可以创建字典:
myattrs = {'k': 'v',...}
def make_attrs(self, *args, **kwargs):
for l in args:
setattr(self, l, None)
for k,v in kwargs.items():
setattr(self, k, v)
通常,最好使用__init__
方法执行此操作(我认为这是PEP标准,因此在这里可以让我保持诚实),但这是一种简单的方法