面向对象的object has no attribute问题

跟着b站上视频操作的,我觉得还是没有吃透类和对象
class HouseItem:

    def __init__(self,name,area):

        self.name=name
        self.area=area

    def __str__(self):

        return("[%s]占地%2.f"%(self.name,self.area))

class House:

    def __init__(self,house_type,area):

        self.house_type=house_type
        self.area_type=area

        # 剩余面积
        self.free_area = area

        # 家具名称列表
        self.item_list = []

    def __init__(self,house_type,area):

        self.house_type=house_type

        self.area=area

    def __str__(self):

        # python能够自动的将一对括号内部的代码连接在一起
        return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
        %(self.house_type,self.area,
        self.free_area,self.item_list))

    def add_item(self,item):

            print("要添加%s" % item)
            # 1.判断家具的面积

            if item.area>self.free_area:
                print("%s家具的面积太大了,无法添加" % item.name)

                return
            # 2.将家居的名称添加到列表中
            self.item_list.append(item.name)

            # 3.计算剩余面积
            self.free_area-=item.area
# 1.创建家具
bed=HouseItem("席梦思", 40)
chest=HouseItem("衣柜", 4)
table=HouseItem("餐桌", 20)

print(bed)
print(chest)
print(table)

# 2.创建房子对象
my_home=House("两室一厅",60)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

print(my_home)

运行结果:

[席梦思]占地40
[衣柜]占地 4
[餐桌]占地20
要添加[席梦思]占地40
Traceback (most recent call last):
  File "D:/Pycharm_Project/pythonProject/08_面向对象基础/hm_12_摆放家具_02_房子类.py", line 69, in <module>
    my_home.add_item(bed)
  File "D:/Pycharm_Project/pythonProject/08_面向对象基础/hm_12_摆放家具_02_房子类.py", line 48, in add_item
    if item.area>self.free_area:
AttributeError: 'House' object has no attribute 'free_area'

我的解答思路和尝试过的方法 上网查说是__两个下划线要换成_一个下划线
我想要达到的结果

你写了两个__init__函数,后写的将前面写的覆盖了,后面的__init__中没有创建item_list属性,所以下面添加家具时会报错
改为

class HouseItem:
    def __init__(self,name,area):
 
        self.name=name
        self.area=area
 
    def __str__(self):
 
        return("[%s]占地%2.f"%(self.name,self.area))
 
class House:
 
    def __init__(self,house_type,area):
 
        self.house_type=house_type
        self.area_type=area
        self.area=area
 
        # 剩余面积
        self.free_area = area
 
        # 家具名称列表
        self.item_list = []
 

 
        
 
    def __str__(self):
 
        # python能够自动的将一对括号内部的代码连接在一起
        return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
        %(self.house_type,self.area,
        self.free_area,self.item_list))
 
    def add_item(self,item):
 
            print("要添加%s" % item)
            # 1.判断家具的面积
 
            if item.area>self.area:
                print("%s家具的面积太大了,无法添加" % item.name)
 
                return
            # 2.将家居的名称添加到列表中
            self.item_list.append(item.name)
 
            # 3.计算剩余面积
            self.free_area-=item.area
# 1.创建家具
bed=HouseItem("席梦思", 40)
chest=HouseItem("衣柜", 4)
table=HouseItem("餐桌", 20)
 
print(bed)
print(chest)
print(table)
 
# 2.创建房子对象
my_home=House("两室一厅",60)
 
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
 
print(my_home)
 

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632