python面向对象案例
python面向对象案例
身份运算符
私有属性和私有方法
在实际的开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问
私有属性就是对象不希望公开的属性
私有方法就是对象不希望公开的方法
定义方法:在定义属性或方法时,在属性名或者方法名前增加两个下划线,就是私有属性或方法
class Women:
"""女性类"""
def __init__(self,name):
"""初始化方法"""
self.name = name
# 前置双下划线的属性是私有的属性
self.__age = 20
def eat(self):
"""吃方法"""
print("%s 今年 %d 岁了,是一个吃货" % (self.name,self.__age))
# 前置双下划线的方法是私有方法
def __secret(self):
"""私有方法"""
print("个人秘密")
nv = Women("lin")
print(nv.name)
# 在类的内部调用__age私有属性
nv.eat()
# 在类的外部调用__age私有属性
print(nv.__age)
python中私有的实质
python中并没有真正意义上的私有
私有变量与方法实质上是通过名字重整的方式,改变名字
私有属性 :__私有属性名—>_类名__私有属性名
私有方法 :__私有方法名—>_类名__私有方法名
class Women:
"""女性类"""
def __init__(self,name):
"""初始化方法"""
self.name = name
# 前置双下划线的属性是私有的属性
self.__age = 20
def eat(self):
"""吃方法"""
print("%s 今年 %d 岁了,是一个吃货" % (self.name,self.__age))
# 前置双下划线的方法是私有方法
def __secret(self):
"""私有方法"""
print("个人秘密")
nv = Women("lin")
print(nv.name)
print(dir(Women))
print(nv._Women__age)
对外提供访问私有属性的接口(方法)
使用get方式获得私有属性值
使用set方式设置私有属性值
def get_age(self):
"""获取私有属性值"""
return self__age
def set_age(self,new_age):
"""设置私有属性值"""
if new_age <=0 or new_age >= 150:
print("您输入的年龄有误")
return
self.__age = new_age
小明爱跑步案例
1)需求
2)分析
3)实现
class Person:
"""人类"""
def __init__(self,name,weight):
"""初始化"""
self.name = name
self.weight = weight
def __str__(self):
"""打印对象的描述信息"""
return "姓名是:%s 体重是:%.2f" % (self.name,self.weight)
def run(self):
"""跑方法"""
print("%s 爱跑步,每次跑步减肥0.5公斤" % self.name)
self.weight -= 0.5
def eat(self):
"""吃方法"""
print("%s 是个吃货,每次体重加1公斤" % self.name)
self.weight += 1
xiao_ming = Person("小明",75.0)
print(xiao_ming)
xiao_ming.run()
print(xiao_ming)
xiao_ming.eat()
print(xiao_ming)
xiao_mei = Person("小美",45.0)
print(xiao_mei)
xiao_mei.run()
print(xiao_mei)
xiao_mei.eat()
print(xiao_mei)
摆放家具案例
1)需求
2)分析
3)实现家具类
class HouseItem:
"""家具类"""
def __init__(self,name,area):
self.name = name
self.area = area
def __str__(self):
""" """
return "家具名字:%s 占地面积:%.1f" % (self.name,self.area)
# 创建家具对象
bed = HouseItem("席梦思",4)
print(bed)
chest = HouseItem("衣柜",2)
print(chest)
table = HouseItem("餐桌",1.5)
print(table)
4)实现房子类
class HouseItem:
"""家具类"""
def __init__(self,name,area):
self.name = name
self.area = area
def __str__(self):
""" """
return "家具名字:%s 占地面积:%.1f" % (self.name,self.area)
# 创建家具对象
bed = HouseItem("席梦思",4)
print(bed)
chest = HouseItem("衣柜",2)
print(chest)
table = HouseItem("餐桌",1.5)
print(table)
class House:
def __init__(self, house_type, area):
# 房子的户型
self.house_type = house_type
# 房子的总面积
self.area = area
# 房子的剩余面积,新房子没有家具,剩余面积就是总面积
self.free_area = area
# 家具名称列表,新房子家具列表为空
self.item_list = []
def __str__(self):
return ("户型:%s 总面积:%.1f 剩余面积:%.1f 家具列表:%s"
% (self.house_type, self.area, self.free_area, self.item_list))
def add_item(self,item):
"""当前方法是添加家具的方法"""
# 1、判断房子的剩余面积和家具的面积大小
# 如果房子剩余面积小于家具面积,不能添加,提示信息,结束函数
if self.free_area < item.area:
print("%s 家具面积太大,无法添加" % item.name)
return
# 2、更新房子的剩余面积
self.free_area -= item.area
# 3、更新家具列表
self.item_list.append(item.name)
big_house = House("大别墅", 60)
print(big_house)
big_house.add_item(bed)
print(big_house)
士兵突击案例
1)需求
2)分析
3)设计枪支类
class Gun:
"""枪支类"""
def __init__(self,type):
"""初始化方法"""
# 枪支的类型
self.type = type
# 子弹的数量,新枪没有子弹
self.bullet_count = 0
def add_bullet(self,count):
"""添加子弹方法"""
self.bullet_count += count
def shoot(self):
"""射击方法"""
# 1、判断枪中有没有子弹,
# 如果没有,不能射击,提示添加子弹
if self.bullet_count <= 0:
print("没有子弹,无法射击,请添加子弹")
return
# 如果有子弹,正常射击,假设一次射一发,更新子弹数量
self.bullet_count -= 1
# 模拟射击动作,打印剩余子弹数量
print("正在射击,剩余子弹数量是:%d" % self.bullet_count)
# 创建枪支对象
ak = Gun("AK47")
ak.shoot()
ak.add_bullet(50)
ak.shoot()
4)设计士兵类
class Gun:
"""枪支类"""
def __init__(self, type):
"""初始化方法"""
# 枪支的类型
self.type = type
# 子弹的数量,新枪没有子弹
self.bullet_count = 0
def add_bullet(self, count):
"""添加子弹方法"""
self.bullet_count += count
def shoot(self):
"""射击方法"""
# 1、判断枪中有没有子弹,
# 如果没有,不能射击,提示添加子弹
if self.bullet_count <= 0:
print("没有子弹,无法射击,请添加子弹")
return
# 如果有子弹,正常射击,假设一次射一发,更新子弹数量
self.bullet_count -= 1
# 模拟射击动作,打印剩余子弹数量
print("正在射击,剩余子弹数量是:%d" % self.bullet_count)
class Soldier:
"""士兵类"""
# gun = None为缺省参数
def __init__(self, name, gun=None):
"""初始化方法"""
# 士兵的姓名
self.name = name
# 士兵的枪支,新兵默认没有枪
self.gun = gun
def add(self,new_count):
"""士兵拿着枪添加子弹"""
# 1、判断士兵有没有枪
# 如果没有枪不能开火,提示分配枪支
if self.gun == None:
print("当前士兵 %s 还没有枪,无法开火,请分配枪支" % self.name)
return
# 2、如果有,则士兵拿着枪添加子弹
self.gun.add_bullet(new_count)
def fire(self):
"""开火方法"""
# 1、判断士兵有没有枪
# 如果没有枪不能开火,提示分配枪支
if self.gun == None:
print("当前士兵 %s 还没有枪,无法开火,请分配枪支" % self.name)
return
# 2、士兵拿着枪射击
print("士兵 %s 正在射击" % self.name)
self.gun.shoot()
# 创建枪支对象
ak = Gun("AK47")
# 一个类创建的对象,可以作为另一个类的属性
# 使用士兵类模板创建对象
sb = Soldier("许三多")
sb.fire()
sb1 = Soldier("Lin", ak)
sb1.fire()
sb1.add(50)
sb1.fire()
sb1.fire()
sb1.fire()
模块
模块的搜索顺序(拓展)
_name_属性
包
版权声明:本文为CloserSide原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。