面向对象基础
1类和对象关系:用类去创建一个对象(用一个对象去实例一个类)
2类作用:用来创造对象的(造洗衣机的图纸)
3定义类类名:大驼峰命名规则(首字母都大写)
创建对象语法
对象名 = 类名()
创建类语法
class 类名():
代码
...
打印成果语法
实例方法、对象方法--haier.wash(def的函数)
6应用:
需求:洗衣机 功能:能洗衣服
1)定义洗衣机类
语法:class 类名():
代码
class Washer():
def wash(self):
print("能洗衣服")
2)创建对象
#对象名 = 类名()
haier = Washer()
3)验证成果
打印海尔对象
print(haier)
使用wash功能–实例方法、对象方法–haier.wash
haier.wash()
7self:指调用该函数的对象
8类外面添加对象属性
语法:对象名.属性名 = 值
haier.width = 500
(洗衣机宽为500)
9在类外面获取属性
语法:对象名.属性名
print(f'洗衣机宽度是{haier1.width}')
10在类里面获取对象属性
语法:self.属性名
2应用:
#1定义类
class 类名():
代码
class Washer():
def wash(self):
print('能洗衣服')
#2创建对象
对象名 = 类名()
haier1 = Washer()
#3添加实例属性
语法:对象名.属性名 = 值
haier1.width = 500
haier1.height = 800
11魔法方法:有具体特殊功能的函数
1__init__()作用:初始化对象
1定义类
class Washer():
#2定义__init__,添加实例属性(初始化)
添加实例属性
def __init__(self):
self.width = 500
self.hight = 800
类里面调用实例属性
def print_info(self):
print(f'洗衣机的宽度是{self.width},高度是{self.height}')
#3创建对象
对象名 = 类名()
haier = Washer()
#4调用
实例方法、对象方法–haier.wash
haier.print_info()
2带参数的__init__()**
#1定义类 带参数的init:宽度和高度 实例方法:调用实例属性
class Washer():
#2定义带参数的init
def__init__(self,width,heith):
self.width = width
self.height = height
#3定义实例方法
def print_info(self):
print(f'洗衣机的宽度是{self,width},洗衣机的高度是{self,height}')
#4创建对象:创建多个对象且属性值不同:调用实例方法
haier1 = Washer(10,20)
haier1.print_info()
haier2 = Waher(100,200)
haier2.print_info()
3__str__()
1str作用:会打印这个方法中return的值
class Washer():
def __init__(self):
self.width = 300
haier = Washer()
print(haier)
会输出一些内存
class Washer():
def __str__(self):
return'解释说明:类的说明或对象状态的说明'
haier = Washer()
print(haier)
4__del__()
1del作用:删除对象
class Waster():
def __init__(self):
self.width = 300
def __del__(self)
print('对象已被删除')
haior = Washer()
#对象已被删除
20应用(烤地瓜)
1需求:1被烤时间和地瓜状态
0-3分钟:生
3-5分钟:半生不熟
5-8分钟:熟了
超过8分钟:糊了
2添加调料
1定义类:初始化属性,被烤时间和加调料方法,显示对象信息的str
class SweetPotato():
def __init__(self):
#烤的时间
self.cook_time = 0
#烤的状态
self.cook_state = '生的'
#调料列表
self.condiment = []
定义考的时间
def cook(self,time):
#1计算烤地瓜时间
self.cook_time +=time
#2用整体烤的时间来判断地瓜状态
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 8 < self.cook_time:
self.cook_state = '烤糊了'
#加入的调料
def add_condiments(self,condiment):
self.condiments.append(condiment)
#输出烤的状态
def __str__(self):
return f'这个地瓜被烤过的时间{self.cook_time},状态是{self.cook_state}'
#2创建对象并调用对应实例方法
digual1 = SweetPotato()
print(digual1)
digual1.cook(2)
digual1.add_condiments('辣椒面儿')
print(digual1)
digual1.cook(2)
digual1.add_condiments('酱油')
print(digual1)
21应用(搬家具)
1需求:将小于房子剩余面积家具搬到房子里
2步骤:
1定义类:房子类和家具类
房子类:1实例属性:
房子地理位置,房子占地面积,房子剩余面积,房子家具列表
2实例方法:容纳家具
3显示房子信息
家具类:1家具名称
2家具占地面积
class Furniture():
def __init__(self,name,area):
#家具名字
self.name = name
#家具占地面积
self.area = area
__init__定义具体的对象属性:self.性质=具体的东西
__init__定义待定的对象属性:self.性质=随便叫一个名字
class House():
**为什么不定义free_area这个形参:因为free_area和area有联系**
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.funiture}')
def add_furniture(self,item):
#如果家具面积<=房子剩余面积:可以搬入(家具列表添加家具名字
并更新房子剩余面积)
#剩余面积 - 该家具占地面积
#否则无法容纳
if self.free_area >=item.area:
self.furniture.append(item.name)
#剩余面积=以前剩余面积-该家具面积
self.free_area-=item.area
else:
print('家具太大,剩余空间不足')
2创建对象
**有带参数的创建对象就是对象名=类名()
括号里面添具体参数
bed = Furniture('双人床',6)
sofa = Furniture('沙发',10)
jia1 = House('北京',1000)
3验证成果:实例方法、对象方法–haier.wash
jia1.add_furniture(bed)
print(jia1)
ball = Furniture('篮球场',2000)
jia1.add_funiture(ball)
print(jia1)
22总结
类
class 类名():
代码
对象
对象名 = 类名()
添加对象属性
类外面
对象名.属性名 = 值
类里面
self.属性名 = 值
获取对象属性
类外面
对象名.属性名
类里面
self.属性名
魔法名字
1__init__():初始化
2__str__():输出对象信息
3__del__():删除对象时 调用