我有一个名为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})
但是它不会改变字符串的类型。
答案 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
通过这种方式,所有append
至nomes
的对象仍将是实际对象。而且更有意义,因为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')