python之面向对象

类:是一个特殊的对象,class A:定义的类属于 类对象

 

类的实例:obj = A()属于 实例对象

 

实例属性:__init__定义实例属性

 

实例方法:(self),对象名.方法名

 

类属性:针对类对象定义的属性,访问类属性方法:类名.类属性/对象名.类属性

 

类方法:针对类对象定义的方法,内部可直接访问类属性和其他类方法;类名.方法名

 

静态方法:不需要访问实例属性、类属性,也不用调用实例方法、类方法

 

私有属性:对象不希望公开的属性,访问私有属性:对象名._类名.__私有属性

 

私有方法:对象不希望公开的方法,访问私有方法(无法直接调用):对象名._类名.__私有方法

 

 

1.封装实例应用

需求:

房子(House) 有 户型、总面积 和 家具名称列表

新房子没有任何的家具

家具(HouseItem) 有 名字 和 占地面积,其中

席梦思(bed) 占地 4 平米

衣柜(chest) 占地 2 平米

餐桌(table) 占地 1.5 平米

将以上三件 家具 添加 到 房子 中

打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

 

class Game:
    #   定义一个类属性
    top_score = 0

    def __init__(self, player_name):
        """
        定义一个实例属性
        :param player_name:
        """
        self.player_name = player_name

    @staticmethod
    def show_help():
        """定义一个静态方法"""
        print("游戏帮助信息")

    @classmethod
    def show_top_score(cls):
        """
        定义一个类方法
        :return:
        """
        print("玩家最高分为{}".format(cls.top_score))

    def start_game(self):
        """
        定义一个实例方法
        :return:
        """
        print("{}开始游戏了~".format(self.player_name))
        Game.top_score = 999


Game.show_help()  # 类名.静态方法
Game.show_top_score()  # 类名.类方法
game = Game("小明")  # 创建对象,实例化
game.start_game()  # 对象名.方法名()--实例方法
Game.show_top_score()
----------------------------------------
#游戏帮助信息
#玩家最高分为0
#小明开始游戏了~
#玩家最高分为999

需求:

士兵 zaygee 有一把 AK47

士兵 可以 开火

枪 能够 发射 子弹

枪 装填 装填子弹 —— 增加子弹数量

class Gun:
    def __init__(self, model):
        # 枪型号
        self.model = model
        # 子弹数量
        self.bullet_count = 0

    def add_bullet(self, count):
        # 填充子弹
        self.bullet_count += count

    def shoot(self):
        if self.bullet_count <= 0:
            print("没有子弹,等死吧。。。")
            return
        # 发射子弹
        self.bullet_count -= 1
        print("{}剩余子弹{}".format(self.model, self.bullet_count))


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

    def fire(self):
        if self.gun is None:
            print("没有枪,不敢上")
            return
        print("冲啊...{}".format(self.name))
        self.gun.add_bullet(30)
        self.gun.shoot()


ak47 = Gun('ak47')
soldier = Soldier("zaygee")
soldier.gun = ak47  # 把枪分配给士兵
soldier.fire()
-------------------------
#冲啊...zaygee
#ak47剩余子弹29

 

2.继承与多态应用实例

 

需求:

1.在 Dog 类中封装方法 game

普通狗只是简单的玩耍

2.定义 XiaoTianDog 继承自 Dog,并且重写 game 方法

哮天犬需要在天上玩耍

3.定义 Person 类,并且封装一个 和狗玩 的方法

在方法内部,直接让 狗对象 调用 game 方法

class Dog:
    def __init__(self, name):
        self.name = name

    def game(self):
        print("{}在街上溜达".format(self.name))


class XiaoTianDog(Dog):
    def game(self):
        print("{}在天上飞".format(self.name))


class Person:
    def __init__(self, name):
        self.name = name

    def play_with_dog(self, dog):
        print("{}和{}在快乐的玩耍".format(self.name, dog.name))
        dog.game()


wangcai = XiaoTianDog("哮天犬")  # 创建一个狗对象
zaygee = Person("zaygee")  # 创建一个人对象
zaygee.play_with_dog(wangcai)  # 人遛狗
--------------------------
#zaygee和哮天犬在快乐的玩耍
#哮天犬在天上飞

3.私有属性&私有方法

class Man:
    def __init__(self, name):
        self.name = name
        self.__age = 18

    def __secret(self):
        return "我的年龄是{}".format(self.__age)


zaygee = Man("zaygee")
print(zaygee.name)
#   访问私有属性:对象名._类名.__私有属性
print(zaygee._Man__age)
#   访问私有方法(无法直接调用):对象名._类名.__私有方法
print(zaygee._Man__secret())
--------------------------
#zaygee
#18
#我的年龄是18

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值