首先感谢各位大佬的帮忙,本人新手,在尝试做例题的时候,答案提到应该把bed,chest,table用三行my_house.add_items() 分别导入,我在尝试能否直接导入一个列表时,意识到了问题。如果用for遍历,出来的是我想要的,
如:要添加 ['席梦思']:占地4.00
可是如果直接my_house.add_items(item_list), 出现的却是内存地址。
要添加 (<__main__.HouseItem object at 0x0000018A9E566588>, <__main__.HouseItem object at 0x0000018A9E841DD8>, <__main__.HouseItem object at 0x0000018A9E856860>)
难以理解为什么,大概是某些python的基础我还没有打牢,现在完全想不到什么原因,还请各位大佬提点一二。
源代码如下
class HouseItem:
def __init__(self,name,area):
self.name = name
self.area = area
def __str__(self):
return '{}:占地{:.2f} \t'.format([self.name],self.area)
class House:
def __init__(self,house_type,house_area):
self.house_type = house_type
self.house_area = house_area
# 剩余面积
self.rest_area = house_area
# 家具名称列表
self.item_list = []
def __str__(self):
return '户型:{}\n总面积: {:.2f}\n家具类型:{}'.format(self.house_type,
self.house_area,self.item_list)
def add_items(self,item):
print('要添加 {}'.format(item))
# 创建家具
bed = HouseItem('席梦思',4)
chest = HouseItem('衣柜',2)
table = HouseItem('餐桌',1.5)
item_test1 = bed,chest,table
item_list = bed,chest,table
item_test2 = [bed,chest,table]
my_house = House('两室一厅',120)
my_house.add_items(item_list)
for n in item_list:
my_house.add_items(n)
首先你先弄清楚三点
A. 这里你重写了类的__str__方法,打印类对象,会按照你的规则打印
B. House.add_items 方法里的,print('要添加 {}'.format(item)),打印的是item这个对象
C. 变量 item_list,是一个元组,元组里存了三个HouseItem对象
下面开始说你的问题
A. my_house.add_items(item_list) 打印的是内存地址,原因是 add_items 方法打印的是 你传入的item_list 这个元组对象,不是你写的HouseItem的对象,只不过item_list元组里,存的是三个 HouseItem对象,所以打印出来是三个内存地址构成的元组,简而言之,这里print的是元组,不是 HouseItem对象。
B. for 循环遍历,然后 my_house.add_items(n),这种方式,你传入的参数是n,而n是HouseItem对象 ,所以print('要添加 {}'.format(item))的时候,打印的是HouseItem对象,也就是你说的 要添加 ['席梦思']:占地4.00
C. 另外你的House对象创建时的传参没问题
明白了吗?
House 类 接收两个参数 而你只传了一个参数, 总之你这些代码调用的时候全部都是冲突的,建议从基础开始学习,一步一步来