面向对象
- 理解面向对象
- 类和对象
- 添加和获取对象属性
- 魔方方法
一、理解面向对象
面向对象时一种抽象化得编程思想,很多编程语言中都有得一种思想。
例如:洗衣服
思考:几种途径可以完成洗衣服
手洗和洗衣机
总结:面向对象就是将编程当成一个实物,对外界来说,事物是直接可以使用得,不用管他内部得情况。而编程就是设置事物能够做什么事。
二、类和对象
面向对象编程过程中,有两个重要组成部分:类和对象
2.1理解类和对象
2.1.1类
类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物。
- 特征是属性
- 行为是方法
类比如说是制造洗衣机的图纸,也即是说类是用来创造对象的。
2.1.2对象
对象是类创建出来的真实存在的事物,例如,洗衣机
注意:开发中,先有类,再有对象。
2.2面向对象实现方法
2.21定义类
python2中类分为:经典类 和新式类
- 语法
class 类名():
代码
......
注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯
- 体验
2.2.2创建对象
对象又名实例
- 语法
对象名=类名()
- 体验
##定义洗衣机类,功能:洗衣服
#定义洗衣机类
"""
class类名()
代码
"""
class Washer():
def wash(self):
print('能洗衣服')
#创建对象
#对象名=类名()
heier=Washer()
print(heier)
heier.wash()
2.2.3 self
self指得是调用该函数的对象。
#
class Washer():
def wath(self):
print('洗衣服')
print(self)
heier=Washer()
print(heier)
heier.wath()
"""
<__main__.Washer object at 0x00000121E917AE80>
洗衣服
<__main__.Washer object at 0x00000121E917AE80>
打印对象和打印self的地址一样的
self 就是heier
"""
#
class Washer():
def wath(self):
print('洗衣服')
print(self)
heier1=Washer()
print(heier1)
heier1.wath()
heier2=Washer()
print(heier2)
heier2.wath()
"""
<__main__.Washer object at 0x00000224BFDB8B70>
洗衣服
<__main__.Washer object at 0x00000224BFDB8B70>
<__main__.Washer object at 0x00000224BFDA3B70>
洗衣服
<__main__.Washer object at 0x00000224BFDA3B70>
同一个类创建多个对象,对象的地址不同
"""
三,添加和获取对象属性
属性即特征,比如:洗衣机的宽度、高度、重量。。。
对象属性既可以在类外面添加和获取,也可以在类里面添加和获取。
3.1类外面添加对象属性
- 语法
对象名.属性名=值
- 体验
class Washer():
def wath(self):
print('洗衣服')
print(self)
heier1 = Washer()
print(heier1)
heier1.wath()
heier1.high=200
heier1.width=500
3.2类外面获取对象属性
- 语法
对象名.属性名
- 体验
#获取属性名
print(f'洗衣机的宽度{heier1.width},{heier1.high}')
3.3类里面获取对象属性
- 语法
self.属性名
- 体验
class Washer():
def wath(self):
print('洗衣服')
print(f'洗衣机的宽度{self.width},')
print(f'洗衣机高度{self.high}')
heier1 = Washer()
heier1.high=200
heier1.width=500
heier1.wath()
"""
洗衣服
洗衣机的宽度500,
洗衣机高度200
"""
四、魔法方法
在python中,__ xx __()的函数叫做魔法方法,指的是具有特殊功能的函数。
4.1_init_()
4.1.1体验_init_
思考:洗衣机的高度和宽度是与生俱来的属性,可不可以在生产过程中就赋予这些属性?
答:理应如此
init()方法作用:初始化对象
class Washer():
def __init__(self):
self.high=200
self.width=500
def wath(self):
print(f'洗衣机的宽度{self.width},')
print(f'洗衣机高度{self.high}')
heier1 = Washer()
heier1.wath()
"""
洗衣机的宽度500,
洗衣机高度200
"""
注意:
- init()方法,在创建一个对象时默认被调用,不需要手动调用
- init(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
4.1.2带参数的_init_()
思考:一个类可以创建多个对象,如何对不同的对象设置不同的初始化属性
答 传参数
class Washer():
def __init__(self,high,width):
self.high=high
self.width=width
def wath(self):
print(f'洗衣机的宽度{self.width},')
print(f'洗衣机高度{self.high}')
heier1 = Washer(10,20)
heier1.wath()
heier2=Washer(30,50)
heier2.wath()
"""
洗衣机的宽度20,
洗衣机高度10
洗衣机的宽度50,
洗衣机高度30
"""
4.2_str_()
在使用print输出对象的时候,默认打印对象的内存地址。如果类定义了—str—方法,那么就会打印从这个方法中return的数据。
class Washer():
def __init__(self):
self.high=500
def __str__(self):
return '解释说明,类的说明或对象状态的说明'
heier1 = Washer()
print(heier1)
"""
解释说明,类的说明或对象状态的说明
"""
4.3 --del–
但删除对象的时候,python解释器会默认调用-del-()方法
class Washer():
def __init__(self):
self.high=500
def __del__(self):
print('对象删除')
heier1 = Washer()
"""
对象删除
"""
五综合应用
5.1烤地瓜
class SweetPotato():
def __init__(self):
#焙烤的时间
self.cook_time=0
#考的状态
self.cook_state='生的'
#调料列表
self.condiment =[]
def cook(self,time):
self.cook_time+=time
if 0<=self.cook_time<3:
self.cook_state='生的'
elif 3<=self.cook_time<5:
self.cook_state = '半生不熟'
elif 5 <= self.cook_time < 8:
self.cook_state = '熟了'
elif 3 <= self.cook_time :
self.cook_state='烤糊了'
def add_condiments(self,condiment):
self.condiment.append(condiment)
def __str__(self):
return f'这个地瓜烤了{self.cook_time},状态{self.cook_state},调料{self.condiment}'
#2
digua=SweetPotato()
print(digua)
digua.cook(2)
print(digua)
digua.add_condiments('酱油')
digua.cook(2)
digua.add_condiments('盐')
print(digua)
"""
这个地瓜烤了0,状态生的
这个地瓜烤了2,状态生的
这个地瓜烤了4,状态半生不熟
"""
"""
这个地瓜烤了0,状态生的,调料[]
这个地瓜烤了2,状态生的,调料[]
这个地瓜烤了4,状态半生不熟,调料['酱油', '盐']
"""
5.2搬家具
需求
将小于房子剩余面积的家具面积摆放到房子中
class Furniture():
def __init__(self,name,area):
self.name=name
self.area=area
class Home():
def __init__(self,address,area):
self.address=address
self.area=area
self.free_area=area
self.furniture=[]
def __str__(self):
return f'房子地理位置{self.address},房屋面积是{self.area},房屋剩余面积是{self.free_area},家具{self.furniture}'
def add_furniture(self,item):
if item.area <=self.free_area:
self.furniture.append(item.name)
self.free_area-=item.area
else:
print('家具太大')
#
bd=Furniture('双人床',6)
safa=Furniture('沙发',6)
jia=Home('北京',1000)
print(jia)
jia.add_furniture(bd)
print(jia)
jia.add_furniture(safa)
print(jia)
"""
房子地理位置北京,房屋面积是1000,房屋剩余面积是1000,家具[]
房子地理位置北京,房屋面积是1000,房屋剩余面积是994,家具['双人床']
房子地理位置北京,房屋面积是1000,房屋剩余面积是988,家具['双人床', '沙发']
"""