面向对象编程三要素:封装、继承、多态。
类与对象
万事万物都可以用类描述。
- 定义一个类
class Cat: #大驼峰命名
#初始化对象 #方便快速定义新对象属性的功能
def__init__(self,new_name,new_age):
self.name = new_name
self.age = new_age
def__str__(self): #方便print输出对象属性的功能
return '%s的年龄是:%d'%(self.name,self.age)
#功能区
def eat(self):
print('猫在吃鱼')
def drink(self):
print('猫在喝水')
def introduce(self):
print('%s的年龄是:%d'%(self.name,self.age))
#self 确保了多个对象的重复使用性
- 创建一个对象
#创建一个对象
Tom = Cat()
#调用对象功能
Tom.eat()
Tom.drink()
#给Tom指向的类添加 2个属性(不常用)
Tom.name = '汤姆'
Tom.age = 40
#调用新功能
Tom.introduce()
>>>汤姆的年龄是:40
- 创建第二个对象
lanmao = Cat('蓝猫',10) #__init__对号入组添加属性
print(lanmao) #__str__功能方便报告属性
>>>蓝猫的年龄是:10
综合运用——烤地瓜
class SweetPotato:
def __init__(self):
self.cookedString = '生的'
self.cookedLevel = 0 #相当于全局变量的属性
self.Condiments = [] #列表属性可以储存数据
def __str__(self): #方便print输出
return '地瓜 状态:%s(%d),添加的佐料有%s'%(self.cookedString,self.cookedLevel,self.Condiments)
def cook(self,cooked_time):
self.cookedLevel += cooked_time #累计cook时间
if self.cookedLevel >= 0 and self.cookedLevel<3:
self.cookedString = '生的'
elif self.cookedLevel >=5 and self.cookedLevel<5:
self.cookedString = '半生不熟'
elif self.cookedLevel >=5 and self.cookedLevel<8:
self.cookedString = '熟惹'
elif self.cookedLevel > 8:
self.cookedString = '烤糊了'
def addCondiments(self,item): #添加佐料功能
self.Condiments.append(item)
#创建了一个地瓜对象
di_gua = SweetPotato()
print(di_gua)
#开始烤地瓜
i = 1
while i<=10:
i+=1
di_gua.cook(1)
print(di_gua)
if i==2:
di_gua.addCondiments('盐')
elif i==4:
di_gua.addCondiments('孜然')
elif i==8:
di_gua.addCondiments('蒜蓉')
>>>
地瓜 状态:生的(0),添加的佐料有[]
地瓜 状态:生的(1),添加的佐料有[]
地瓜 状态:生的(2),添加的佐料有['盐']
地瓜 状态:生的(3),添加的佐料有['盐']
地瓜 状态:生的(4),添加的佐料有['盐', '孜然']
地瓜 状态:熟惹(5),添加的佐料有['盐', '孜然']
地瓜 状态:熟惹(6),添加的佐料有['盐', '孜然']
地瓜 状态:熟惹(7),添加的佐料有['盐', '孜然']
地瓜 状态:熟惹(8),添加的佐料有['盐', '孜然', '蒜蓉']
地瓜 状态:烤糊了(9),添加的佐料有['盐', '孜然', '蒜蓉']
地瓜 状态:烤糊了(10),添加的佐料有['盐', '孜然', '蒜蓉']
综合运用——房子与家具
class Home:
def __init__(self,area,info,addr):
self.area = area
self.info = info
self.addr = addr
self.leftarea = area #剩余面积与内含物品都是房子的属性。
self.content = []
def __str__(self):
msg = '房子的面积是:%d,可用面积是:%d,户型是:%s\n地址是:%s。'%(self.area,self.leftarea,self.info,self.addr)
if len(self.content) != 0:
msg += '当前房屋里含有物品%s\n'%(str(self.content))
return msg
def add_item(self,item):
self.leftarea -= item.area
self.content.append(item.name)
class Bed:
def __init__(self,area,name):
self.name = name
self.area = area
def __str__(self):
return'床的品牌是:%s,大小是:%d。'%(self.name,self.area)
house = Home(120,'三室一厅','北京市 朝阳区 长安街 666号')
print(house)
bed1 = Bed(3,'席梦思')
print(bed1,end='')
bed2 = Bed(2,'小米')
print(bed2,end='')
bed3 = Bed(4,'京东')
print(bed3)
print('\n')
house.add_item(bed1)
print(house)
house.add_item(bed2)
print(house)
house.add_item(bed3)
print(house)
>>>
房子的面积是:120,可用面积是:120,户型是:三室一厅
地址是:北京市 朝阳区 长安街 666号。
床的品牌是:席梦思,大小是:3。床的品牌是:小米,大小是:2。床的品牌是:京东,大小是:4。
房子的面积是:120,可用面积是:117,户型是:三室一厅
地址是:北京市 朝阳区 长安街 666号。当前房屋里含有物品['席梦思']
房子的面积是:120,可用面积是:115,户型是:三室一厅
地址是:北京市 朝阳区 长安街 666号。当前房屋里含有物品['席梦思', '小米']
房子的面积是:120,可用面积是:111,户型是:三室一厅
地址是:北京市 朝阳区 长安街 666号。当前房屋里含有物品['席梦思', '小米', '京东']