python3面向对象编程案例,python中的面向对象编程

大家好,本文将围绕python面向对象编程的三大特性展开说明,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_属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值