我有一个类对象列表,我想将其作为对象分发给其他列表,然后应调用这些列表以提供与其中的对象的交互。
我目前无法解决的问题是,当尝试将对象从第一个列表追加到第二个列表的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>]
答案 0 :(得分:0)
正如其他人在注释中指出的那样。由于r
和r1
是该类的实例,因此在您的代码中,您现在正在获得预期的结果。如果要基于名称区分实例并返回实例,则可以传递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>}