weixin_43521324 2019-07-18 07:09 采纳率: 100%
浏览 290
已采纳

为何打印对象时出现两种不同结果?

首先感谢各位大佬的帮忙,本人新手,在尝试做例题的时候,答案提到应该把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)

  • 写回答

2条回答 默认 最新

  • 积跬步以至千里。 2019-07-20 10:25
    关注

    首先你先弄清楚三点

    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对象创建时的传参没问题

    明白了吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码