Python类对象追加到列表

时间:2019-01-16 15:22:55

标签: python

我有一个类对象列表,我想将其作为对象分发给其他列表,然后应调用这些列表以提供与其中的对象的交互。

我目前无法解决的问题是,当尝试将对象从第一个列表追加到第二个列表的for循环中,而是用类对象填充新列表时,将它们的指针指向内存。

这目前在Python 3.x上运行(如有区别)。

我已经看到一些建议与__str__
一起使用的情况 __repr__,但我没有为我的案件提供解决方案。

class Robot():
    """Test class"""
    def __init__(self, age):
        self.age = age

r = Robot(10)
r1 = Robot(15)

mylist1 = [r, r1]
mylist2=[]

for item in mylist1:
    mylist2.append(item)
print(mylist2)

我希望得到类似[r, r1]

的信息

这是我得到的结果:

[<__main__.Robot object at 0x000001285CEE33C8>, <__main__.Robot object at 0x000001285CEE3748>]

1 个答案:

答案 0 :(得分:0)

正如其他人在注释中指出的那样。由于rr1是该类的实例,因此在您的代码中,您现在正在获得预期的结果。如果要基于名称区分实例并返回实例,则可以传递name参数并定义__repr__来表示调用str(instance)时的输出。只是给你一个提示:

class Robot():
    """Test class"""
    def __init__(self, age, name):
        self.age = age
        self.name = name

    def __repr__(self):
        return self.name

r = Robot(10,'r')
r1 = Robot(15,'r1')

mylist1 = [r, r1]
mylist2 = []

for item in mylist1:
    mylist2.append(item)
print(mylist2)

结果:

[r, r1]

否则可能是使用字典进行映射

class Robot():
    """Test class"""
    def __init__(self, age,name):
        self.age = age
        self.name=name

r = Robot(10,'r')
r1 = Robot(15,'r1')

mylist1 = [r, r1]
d={}

for item in mylist1:
    d[item.name]=item
print(d)

输出

{'r': <__main__.Robot instance at 0x0000000010BAD708>, 'r1': <__main__.Robot instance at 0x0000000010BAD148>}
相关问题