面向对象封装案例II

封装:

1、封装是面向对象编程的一大特点

2、面向对象编程的第一步---将 属性方法 封装到一个抽象的

3、外界使用 类 创建对象,然后让对象调用方法

4、对象方法的细节 都被封装在 内部

01士兵突击

需求:

        1、士兵 许三多 有一把AK47

        2、士兵可以开火

        3、枪能够发射子弹

        4、枪装填子弹--增加子弹数量 

Gun

name

bullet

__init__

__str__

shoot

add_bullet

Solider

name

gun

__init__

__str__

fire

1.1开发枪类

假设:枪的初始子弹为0

1.2开发士兵类

假设:每一个新兵都没有枪

        定义没有初始值的属性:

                -可以使用None关键字,表示什么都没有

                -表示一个空对象,没有方法和属性,是一个特殊的常量

                - 可以将None赋值给任何一个变量

        fire方法需求

                -判断是否有枪,没有枪无法冲锋

                -喊一声口号

                -装填子弹

                -射击

class Soldier:
    def __init__(self, name):
        self.name = name
        self.gun = None

    def __str__(self):
        if self.gun == None:
            return "士兵%s当前没有枪械,请自行装配武器" % self.name
        return "%s当前持有%s,有%d发子弹" % (self.name, self.gun, self.gun.bullet)

    def fire(self):
        if self.gun == None:
            print("对不起,你还没有枪")
            return
        self.gun.shoot()


class Gun:
    def __init__(self, name):
        self.name = name
        self.bullet = 0

    def __str__(self):
        return "%s拥有%d发子弹" % (self.name, self.bullet)

    def add_bullet(self, num):
        self.bullet += num

    def shoot(self):
        if self.bullet > 0:
            self.bullet -= 1
            print("突突突!还剩%d发子弹" % self.bullet)
            return
        print("对不起子弹不足,请补充")


gun_1 = Gun("AK47")
soldier_1 = Soldier("许三多")
print(gun_1)
print(soldier_1)
soldier_1.fire()
soldier_1.gun = gun_1
gun_1.add_bullet(1)
soldier_1.gun.shoot()
soldier_1.fire()

 02身份运算符

身份运算符用于比较两个对象的内存地址是否一致-----是否是对同一对象的引用

        在Python中针对None比较时,建议用is判断

运算符描述实例
isis是判断两个标识符是不是引用同一个对象

x is y 类似

id(x)== id(y)

is notis not是判断两个标识符是不是引用不同对象

x is not y 类似

id(x)!=id(y)

is与==区别:

-is用于判断两个变量引用的对象是否为同一个

-==用于判断引用变量的值是不是相等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值