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条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀