1. 类变量
1.1 类变量的概念
类变量是定义在类中,不属于某个具体对象的特征,被所有对象共同使用的特征,属于整个类的变量。
1.2 定义类变量的语法格式
class 类名:
变量名 = 值
复制代码
类名下直接定义变量
1.3 调用类变量语法格式
赋值格式:
类名.类变量名 = 值
取值格式:
类名.类变量名(推荐)
对象名.类变量名(不推荐)
1.4 注意事项
- 类变量推荐使用类名取值访问,也可以使用对象名取值访问
- 类变量只能通过类名修改;使用对象名调用类变量修改类变量的值时会创建新的对象独有变量;如果此时对象具有同名对象变量,则会变成修改对应的变量值
- 类变量可以私有化
2. 类方法
2.1 类方法的概念
类方法是定义在类中,不属于某个具体对象的行为,被所有对象共同使用的行为,类方法在类中公有。
2.2 定义类方法基本语法
class 类名:
@classmethod
def 类方法名(cls,形参1,形参2,...):
类方法体
复制代码
2.3 调用类方法语法格式
类名.类方法名(实参1,实参2,...)(推荐)
对象名.类方法名(实参1,实参2,...)(不推荐)
2.4 注意事项
- 类方法中不允许使用实例变量和实例方法
- 类方法中允许使用类变量和类方法,通过第一个参数cls进行
- 实例方法中允许使用类变量和类方法
3. 静态方法
3.1 定义静态方法语法格式
class 类名:
@staticmethod
def 方法名(形参1,形参2,…):
方法体
复制代码
3.2 调用静态方法语法格式
类名.静态方法名(实参1,实参2,…)(推荐)
对象名.静态方法名(实参1,实参2,…)(不推荐)
3.3 各种方法定义规则
- 只访问成员变量的方法,定义成实例方法
- 只访问类变量的方法,定义类方法
- 既访问成员变量,也访问类变量的方法,定义成实例方法
- 既不访问成员变量,也不访问类变量,定义成静态方法
案例: 手机
"""
演示手机案例
要求:
手机电量默认是100
打游戏每次消耗电量10
听歌每次消耗电量5
打电话每次消耗电量4
接电话每次消耗电量3
充电可以为手机补充电量
"""
# 分析
# 1. 定义类Phone
# 2. 定义变量用于描述电量值
# 3. 定义4个方法用于描述耗电操作
# 4. 定义1个方法用于描述充电操作
# 5. 运行程序,执行上述操作,观察结果
class Phone():
def __init__(self):
self.hp = 100
def game(self):
# 打游戏耗电10
print("打游戏操作,耗电10")
self.hp -= 10
def music(self):
# 听歌耗电5
print("听歌操作,耗电5")
self.hp -= 5
def call(self):
# 打电话耗电4
print("打电话操作,耗电4")
self.hp -= 4
def answer(self):
# 听歌耗电3
print("接电话操作,耗电3")
self.hp -= 3
def charge(self, num):
print("充电断开,已充%d" % num)
self.hp += num
def __str__(self):
return "当前手机电量为:%d" % self.hp
# 创建一部电话,当前电量是100
p = Phone()
# 调用耗电操作
p.game()
print(p)
p.game()
print(p)
p.game()
print(p)
p.charge(10)
print(p)
复制代码
案例:手机修复加强版
"""
演示手机修复加强版案例
要求:
手机耗电操作前要先判定电量是否足够完成此项任务
手机充电操作不能充电超过最大值
"""
# 分析
# 1. 耗电操作之前必须进行判定(if系列),根据结果不同做对应的事情
# 2. 充电操作必须进行判定,手机电量不能超过最大值100
class Phone:
def __init__(self):
self.hp = 100
def game(self):
"""打游戏操作,耗电10"""
# 判定当前电量是否能够完成打游戏的请求
if self.hp >= 10:
# 正常运行,减少电量
print("打游戏操作,耗电10")
self.hp -= 10
else:
# 不能正常运行,给出提示
print("当前电量不足,无法完成操作")
def music(self):
# 判定当前电量是否能够完成听歌的请求
if self.hp >= 5:
# 正常运行,减少电量
print("听歌操作,耗电5")
self.hp -= 5
else:
# 不能正常运行,给出提示
print("当前电量不足,无法完成操作")
def call(self):
# 判定当前电量是否能够完成打电话的请求
if self.hp >= 4:
# 正常运行,减少电量
print("打电话操作,耗电4")
self.hp -= 4
else:
# 不能正常运行,给出提示
print("当前电量不足,无法完成操作")
def answer(self):
# 判定当前电量是否能够完成接电话的请求
if self.hp >= 3:
# 正常运行,减少电量
print("接电话操作,耗电3")
self.hp -= 3
else:
# 不能正常运行,给出提示
print("当前电量不足,无法完成操作")
def charge(self,num):
# 判断当前电量,与充电做比较
if self.hp + num > 100:
# 过充
print("充电已完成,请移除充电器,当前电量为:100")
# 赋值100,解决过充出现150等
self.hp = 100
else:
# 正常充
print("充电断开,充电%d" % num)
self.hp += num
def __str__(self):
return "当前手机电量为:%d" % self.hp
p = Phone()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
print(p)
p.charge(50)
print(p)
复制代码
案例还可优化,小问题电量=0时提示关机等,其它可自行操作。