python学习笔记(7)-类和对象——内置方法与封装案例

内置方法和属性

  1. del :方法类型 对象被从内存中销毁前,会被 自动 调用

如果希望在对象被销毁前,再做一些事情,可以考虑以下__del__方法

class Cat:
    def __init__(self,newname):
        self.name = newname
        print("%s 来了"% self.name)

    def __del__(self):
        print("%s 去了"% self.name)
#使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat("Tom")
print("tom.name")
#del tom #假如在这里删除tom就会销毁,从而调用__del__这个内置方法
print("-" * 50)#tom是一个全局变量,所以程序运行完才销毁

结果:

Tom 来了
tom.name
--------------------------------------------------
Tom 去了
  1. str :返回对象的描述信息,print函数输出使用

如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了。

class Cat:
    def __init__(self,newname):
        self.name = newname
        print("%s 来了"% self.name)

    def __del__(self):
        print("%s 去了"% self.name)
    def __str__(self):#必须返回一个字符串
        return "我是小猫"
#使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat("Tom")
print(tom)#本来是返回内存地址,现在返回的是str返回的字符串

结果:

Tom 来了
我是小猫
Tom 去了

面向对象的封装案例

封装

  1. 封装是面向对象变成的一大特点
  2. 面向对象变成的第一步–将属性和方法封装倒一个抽象的中
  3. 外界使用类创建对象,然后让对象调用方法
  4. 对象方法的细节都被封装在类的内部

小明爱跑步

1 封装
  • 封装是面向对象编程的一大特点
  • 面向对象编程的第一步–将属性方法 封装到一个抽象的类中
  • 外界使用类创建对象,然后让对象调用方法
  • 对象方法的细节都被 封装在类的内部
小明爱跑步
  • 小明 体重75公斤
  • 小明每次跑步会减肥0.5公斤
  • 小明每次吃东西体重增加1公斤
class Person:
    def __init__(self,name,weight):
        #self.属性 = 形参
        self.name = name
        self.weight = weight

    def __str__(self):
        return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name,self.weight)

    def run(self):
        print("%s爱跑步"%self.name)
        self.weight -= 0.5

    def eat(self):
        print("%s 是吃货,吃完这顿在减肥"% self.name)


xiaoming = Person("小明",75.0)
xiaoming.run()
xiaoming.eat()
print(xiaoming)

摆放家具

需求
python学习笔记(7)-类和对象——内置方法与封装案例_第1张图片
添加家具的需求

  1. 判断家具的面积是否超过剩余面积,如果超过,提示不能添加这件家具
  2. 家具的名称追加到家具名称列表中
  3. 用房子的剩余面积-家具面积
class HouseItem:
    def __init__(self,name,area):
        self.name = name
        self.area = area

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


class House:
    def __init__(self,house_type,area):
        self.house_type = house_type
        self.area = area
        #剩余面积和家具列表(只需要外部传递的才需要定义形参)
        self.free_area = area
        self.item_list = []

    def add_item(self,item):
        print("要添加%s"% item)
        if item.area > self.free_area:#1.判断家具的面积
            print("%s 的面积太大了,无法添加")
            return #下方的代码不再执行
        self.item_list.append(item.name)#2.将家具的名称添加到列表中
        self.free_area -= item.area#3.计算剩余面积
    def __str__(self):
        return ("户型是 %s \n总面积是 %.2f \n 剩余面积是%.2f\n家具名称列表是 %s"%
                (self.house_type,self.area,
                self.free_area,self.item_list))


bed = HouseItem("席梦思",4)
chest = HouseItem("衣柜",2)
table = HouseItem("餐桌",1.5)

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

my_home = House("两室一厅",60)
my_home.add_item(bed)
my_home.add_item(chest)
print(my_home)

结果:

[席梦思] 占地 4.00
[衣柜] 占地 2.00
[餐桌] 占地 1.50
要添加[席梦思] 占地 4.00
要添加[衣柜] 占地 2.00
户型是 两室一厅 
总面积是 60.00 
 剩余面积是54.00
家具名称列表是 ['席梦思', '衣柜']

你可能感兴趣的:(python,python,学习,开发语言)