删除字符串的类型,使其成为相同名称的变量

时间:2019-05-01 03:05:00

标签: python-3.x string

我有一个名为elias的变量:

 nomes = []
 class irmaos:
     def __init__(self,posicao,nome):
         self.posicao = posicao
         self.nome = nome
         nomes.append(nome)

 elias = irmaos('gerente','elias')

当我将其添加到列表nomes时,它变成了字符串。现在,我需要从列表nomes中将其作为变量来调用,将其类型从字符串转换为以前的变量。

有可能吗?

我尝试使用以下命令删除引号:

for i in nomes :
   i.translate({ord('a'): None})

但是它不会改变字符串的类型。

2 个答案:

答案 0 :(得分:1)

我建议不要重组"elias"字符串到elias对象,而是建议重构代码,使nomes存储实际对象而不是变量名。

如何将nomes.append移到__init__之外?

nomes = []

class irmaos:
    def __init__(self, posicao, nome):
        self.posicao = posicao
        self.nome = nome

elias = irmaos('gerente', 'elias')
# create more instances here

nomes.append(elias)
# append other objects here

for obj in nomes:
    print(repr(obj), obj.nome)  # <__main__.irmaos object at 0x107b56eb8> elias 

通过这种方式,所有appendnomes的对象仍将是实际对象。而且更有意义,因为nomes不是类的一部分,但是您正在使用类的实例对其进行更新。

如果您确实要在创建nomes实例时更新irmaos,则可以:

  • nomes设为irmaos的类变量
  • 制定用于创建irmaos实例的类方法
    class irmaos:
        nomes = []

        def __init__(self, posicao, nome):
            self.posicao = posicao
            self.nome = nome

        @classmethod
        def from_params(cls, posicao, nome):
            obj = cls(posicao, nome)  # create an instance of irmaos
            irmaos.nomes.append(obj)  # update the nomes list
            return obj   

    elias = irmaos.from_params('gerente', 'elias')
    john  = irmaos.from_params('test', 'john')

    for obj in irmaos.nomes:
        print(repr(obj), obj.nome)

    # <__main__.irmaos object at 0x105c6bf28> elias
    # <__main__.irmaos object at 0x105c6bf60> john

答案 1 :(得分:0)

这回答了我的问题:

class irmaos:
     def __init__(self,posicao,nome):
         self.posicao = posicao
         self.nome = nome


def novo(x,y) :
    x = irmaos(y,x)
    lista.append(x)


novo('elias','anciao')
novo('sandra','visitante')