1、特征即是属性 2、行为即是方法语法:
class obj():代码....
注意:类名要满足标识符命名规则,同时遵循大驼峰命名规则
对象
对象(实例)是类创建出来的真实存在的事物。
语法: 对象名 = 类名()示例:
#需求:洗衣机,功能:洗衣服#定义洗衣机类
class Washer():def wash(self):print("能洗衣服")#创建对象
haier = Washer()#3.验证成果
#使用wash功能 --实例方法/对象方法 -- 对像名.Wash()
#类里面定义的函数称为实例方法
haier.wash()
注意:类里面定义的函数称为实例方法
类里面的self参数
class Washer():def wash(self):print('洗衣服')print(self)haier = Washer()
print(haier)haier.wash()#
结论
由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象
案例测试
1.一个类可以创建多个对象?——可用
2.多个对象都调用函数的时候,self地址相同——不同
# 1.一个类可以创建多个对象
#2.多个对象都调用函数的时候,self地址相同
class Washer():def wash(self):print('洗衣服')print(self)harer1 = Washer()
harer1.wash()
harer2 = Washer()
harer2.wash()
属性即使特征,比如:洗衣机的宽度、高度、重量.... 对象属性既可以在类外面添加和获取,也能在类里面添加和获取。
语法 对象名.属性名 = 值
语法 对象名.属性名案例体验
class Washer():def wash(self):print('洗衣服')haier1 = Washer()# 对象名.属性名 = 值
haier1.width = 400
haier1.height = 500#对象名.属性名
print(f'haier1洗衣机的宽度是{haier1.width}')
print(f'haier1洗衣机的高度是{haier1.height}')
#定义类
class Washer():def wash(self):print('洗衣机')def print_info(self):#self.属性名# print(self.width)# print(self.height)print(f'洗衣机的宽度{self.width}')print(f'洗衣机的高度{self.height}')haier1 = Washer()#添加属性
haier1.width = 400
haier1.height = 500
haier1.wash()#对象调用方法
haier1.print_info()
#目标:定义init魔法方法设置初始化属性 并访问调用
"""
1.定义类init魔法方法:width 和 height添加实例方法:访问实例属性2.创建对象
3.验证成果
"""class Washer():def __init__(self):#添加实例属性self.width = 500self.height = 800def print_info(self):print(f'洗衣机的宽度是{self.width}')print(f'洗衣机的宽度是{self.height}')haier = Washer()
haier.print_info()
注意:
_init_()方法,在创建一个对象时默认被调用,不需要手动调用。
_init_(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
带参数的_init_()
当一个类需要创建多个对象,需要对不同对象设置不同的初始值属性时,可以使用传参的方式实现。
#1.定义类:带参数的init:宽度和高度:实例方法:调用实例属性
class Washer():def __init__(self,width,height):self.widht = widthself.height = heightdef print_info(self):print(f'洗衣机的宽度{self.widht},洗衣机的高度{self.height}')#2.创建对象,创建多个对象且属性值不同:调用实例方法
haier1 = Washer(10,20)
haier1.print_info()haier2 = Washer(100,200)
haier2.print_info()
_str_() 当使用print输出对象打的时候,默认打印对象的内存地址。如果类定义了_str_方法,那么就会打印从在这个方法中return的数据。
class Washer():def __init__(self):self.width = 300def __str__(self):return '解释说明:类的说明或对象状态的说明'haier = Washer()
print(haier) #解释说明:类的说明或对象状态的说明
_del_()
当删除对象时,python解释器也会默认调用_del_()_方法
class Washer():def __init__(self):self.width = 300#自动调用def __del__(self):print('对象一已经删除')haier = Washer()
面向对象综合应用
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.condiments = []#定义方法:成员函数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 self.cook_time >= 8:#烤糊了self.cook_state = '烤糊了'def add_condiments(self,condiment):#用户意愿的调料追加到调料列表self.condiments.append(condiment)def __str__(self):return f'这个地瓜的被烤过的时间是{self.cook_time}分钟,' \f'状态是{self.cook_state},调料有{self.condiments}'#2.创建对象并调用对应的实例方法
digua1 = SweetPotato()
print(digua1)digua1.cook(2)
digua1.add_condiments('辣椒')
print(digua1)#多次调用测试时间是否相加
digua1.cook(2)
digua1.add_condiments('酱油')
print(digua1)
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},' \f'房屋面积是{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.areaelse:print('用户家具太大,剩余面积不足,无法容纳')#双人床, 6
bed = Furniture('双人床',6)
sofa = Furniture('沙发',10)#房子1:北京 2.上海
jia1 = Home('北京',1000)
print(jia1)#开始般家具
jia1.add_furniture(bed)
print(jia1)ball = Furniture('游泳池',2000)
jia1.add_furniture(ball)
print(jia1)
class 类名(): 代码对象
对象名 = 类名()添加对象属性 类外面
对象名 = 类名类里面
self.属性名 = 值获取对象属性 类外面
对象名.属性名类里面
self.属性名
_init_():初始化 _str_():输出对象信息 _del_():删除对象时调用注意:魔法方法不需要手动调用,它默认会自动调用。
上一篇:中国风美出了新高度!这才是中国年的浪漫 中国风体现的淋漓尽致 中国风惊艳美国
下一篇:9台卫视春晚收视比拼!辽宁台第一湖南台第二,贾冰热度最高 2020卫视春晚收视谁第一 2009年春晚节目收视率排名