内置方法和属性
- 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 去了
- 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 封装
- 封装是面向对象编程的一大特点
- 面向对象编程的第一步–将属性和方法 封装到一个抽象的类中
- 外界使用类创建对象,然后让对象调用方法
- 对象方法的细节都被 封装在类的内部
小明爱跑步
- 小明 体重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)
摆放家具
需求
添加家具的需求
- 判断家具的面积是否超过剩余面积,如果超过,提示不能添加这件家具
- 将家具的名称追加到家具名称列表中
- 用房子的剩余面积-家具面积
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
家具名称列表是 ['席梦思', '衣柜']