将一些基本数据类型复合成一个自定义类型,将数据抽象之后封装起来
优势:
? 将数据与数据的操作相关联,代码可读性更高(类是对象的模板)
# 将商品数据抽象化
class Commodity:
def __init__(self, cid=0, name="", price=0):
self.cid = cid
self.name = name
self.price = price
listCommodityInfo = [
Commodity(1000, "轩辕剑", 5000),
Commodity(1001, "莫邪剑", 6000),
Commodity(1002, "七龙珠", 9000)
]
def PrintCommodity(commodity):
print(f"商品ID:{commodity.cid},商品名称:{commodity.name},商品价格:{commodity.price}")
def PrintCommodityInfo():
for Commodity in listCommodityInfo:
PrintCommodity(Commodity)
if __name__ == ‘__main__‘:
PrintCommodityInfo()
定义:向类外提供必要功能,隐藏实现细节。保障数据有效性
优势:简化编程,使用者不必交接具体现实细节
隐藏成员(私有成员):以双下划线开头的成员叫隐藏成员,类外无法访问,也可以叫私有成员,内部可以访问
本质是障眼法,看着双下划线命名,实际是单下划线类名+双下划线名:_MyClass__data
class Enemy:
def __init__(self, name="", hp=0, atk=0, defense=0):
self.name = name
self.hp = hp
self.atk = atk
self.defense = defense
@property
def hp(self):
return self.__hp
@hp.setter
def hp(self,value):
if 0 <= value <= 100:
self.__hp = value
else:
raise Exception("血量不符合要求!")
@property
def atk(self):
return self.__atk
@atk.setter
def atk(self,value):
if 0 <= value <= 200:
self.__atk = value
else:
raise Exception("攻击力不符合标准")
# 属性,保护实例变量
# 属性名与实例变量名称相同
# 属性中操作私有变量
# 核心:覆盖拦截
"""
@property 装饰器,可以拆分成三步
(1)property()创建属性对象
(2)将下面函数作为参数传给property。property(defense)
(3)将属性对象交给变量名关联defense
"""
@property
def defense(self):
return self.__defense
@defense.setter
# 此时defense是经过property装饰过函数
# defense.setter(设置函数),调用下面函数作为参数
def defense(self,value):
if 0 <= value <= 200:
self.__defense = value
else:
raise Exception("防御力不符合标准")
e01 = Enemy("灭霸", 100, 60, 1200)
print(f"{e01.name},血量{e01.hp},攻击力{e01.atk},防御力{e01.defense}")
原文:https://www.cnblogs.com/Hi-Son/p/14118443.html