我试图从A类的B类中获取一个对象,因为A类是由B类的对象组成的:
ObjectClassB = [ObjectCLassA1,ObjectClassA2,ObjectClassA3]
使用ObjectClassA的是B类的子列表。
使用此代码,我尝试将一个元素添加到B类的一个对象中以获得此结果:
[[1, 2, 3], [3, 4, 5], [6,7,8]]
class B:
def __init__(self,X,Y,Z):
self.X=X
self.Y=Y
self.Z=Z
def Xreturner(self):
return self.X
def Yreturner(self):
return self.Y
def Zreturner(self):
return self.Z
class A: # the class A is a composed from many object of B
def __init__(self):
self.ls=[]
self.lst=[[1,2,3],[3,4,5]] #
def __str__(self):
return str(self.lst)
def __repr__(self):
return str(self.__dict__)
def add(self,X,Y,Z): # trying to add b object to the list
b=B(X,Y,Z)
print(b)
self.ls.append(b)
self.lst.append(self.ls)
print(self.lst)
#### TEST####
objA=A()
objA.add(6,7,8)
当我执行此测试时,我得到print(b)
:
>>> <__main__.B instance at 0x1d8ab90>
和print(self.lst)
:
>>> [[1, 2, 3], [3, 4, 5], [...]]
我该如何解决这个问题?
答案 0 :(得分:0)
问题是您正在尝试print
一个对象。 print(b)
将在内存中打印对象的地址,因为它无法推断应该打印的内容。
class B:
def __init__(self,X,Y,Z):
self.X=X
self.Y=Y
self.Z=Z
def Xreturner(self):
return self.X
def Yreturner(self):
return self.Y
def Zreturner(self):
return self.Z
def listReturner(self):
return [self.X, self.Y, self.Z] #return a list ready to be added
class A: # the class A is a composed from many object of B
def __init__(self):
self.ls=[]
self.lst=[[1,2,3],[3,4,5]] #
def __str__(self):
return str(self.lst)
def __repr__(self):
return str(self.__dict__)
def add(self,X,Y,Z): # trying to add b object to the list
b=B(X,Y,Z)
print(b) #Will print the address of b
print(b.X) #Will print the value of X in b
self.ls.append(b)
self.ls.append([b.X, b.Y, b.Z]) ### EDIT: this will add the desired values to the list
print(self.ls) #Will print the addresses of the objects in the list
print([a.X for a in self.ls]) #Will print the values of X for each object in the list
self.lst.append(self.lst) #This line might be wrong
print(self.lst)
#### TEST####
objA=A()
objA.add(6,7,8)
答案 1 :(得分:0)
正如所指出的那样,你的代码(或多或少:更多)正确地做事,而你真正需要解决的是class B
向世界展示的方式。打印。为此,您可以向__repr__
添加class B
方法,以解决此问题。
我看到的另一个问题是self.lst.append(self.ls)
,它会在列表lst
中附加一个列表列表。我想你可以跳过它,然后运行self.lst.append(b)
并完成。
请注意,self.lst
的{{1}}中的前两个元素仍然是类型class A
的,但我想这是怎么回事你想让它发挥作用。
此处编写代码,并在https://eval.in/671341
上查看该代码class B
答案 2 :(得分:0)
这是你想要的最小例子。
在__repr__
B
class B:
def __init__(self,X,Y,Z):
self.X=X
self.Y=Y
self.Z=Z
def __repr__(self):
return str([self.X, self.Y, self.Z])
b1 = B(1, 2, 3)
b2 = B(3, 4, 5)
print(b1) # [1, 2, 3]
b_list = [b1, b2]
print(b_list) # [[1, 2, 3], [3, 4, 5]]