我如何通过列表创建多个属性,例如:

我的代码:

class test():
    def __init__(self, name):
       pass...
    def test2(self, lista):


但是用这种方法我创建了一个对象(列表的最后一个元素。
如何创建多个self.ris以生成多个对象?

最佳答案

使用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()


输出与使用属性相同。

关于python - Python-如何通过列表创建多个属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52042553/

10-12 17:12
查看更多