python面向對象編程案例分享

python面向對象實例

最近整理的一些學習python的基礎資料,下面用一個實例來解釋面向對象編程,希望對才學習python的朋友有所幫助。題目是開槍打敵人的遊戲。具體代碼實現如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*
"""
@author:li-boss
@file_name: mianx.py
@create date: 2019-10-31 22:27 
@blog https://leezhonglin.github.io
@csdn https://blog.csdn.net/qq_33196814
@file_description:
"""


class Person(object):
    """創建一個人類"""

    def __init__(self, name):
        self._name = name  # 人類綁定名字屬性
        self._gun = None
        self._hp = 100

    def bulletToClip(self, bullet, clip):
        clip.preseBullet(bullet)

    def clipToGun(self, gun, clip):
        gun.preseClip(clip)

    def getGun(self, gun):
        self._gun = gun

    def __str__(self):
        if self._hp > 0:

            if self._gun:
                return '%s當前血量爲:%s,%s' % (self._name, self._hp, self._gun)
            else:
                return '%s當前血量爲:%s,沒有槍' % (self._name, self._hp)

        else:
            return '%s已死亡' % self._name

    def fire(self, enemy):
        self._gun.hurt(enemy)

    def injured(self, hurt):
        self._hp -= hurt


class Gun(object):
    """創建一個槍類"""

    def __init__(self, name):

        self._name = name  # 槍類綁定名字屬性
        self._clip = None

    def preseClip(self, clip):
        self._clip = clip

    def __str__(self):
        if self._clip:
            return '%s%s' % (self._name, self._clip)
        else:
            return '%s沒有彈夾' % self._name

    def hurt(self, enemy):
        """槍從彈夾獲取一發子彈"""
        if self._clip:
            bullet_temp = self._clip.toBullet()
            bullet_temp.lethalityToBullet(enemy)

        else:
            print('沒有彈夾')


class Clip(object):
    """創建一個彈夾類"""

    def __init__(self, capacity):
        self._capacity = capacity  # 彈夾的容量
        self._listBullet = []

    def preseBullet(self, bullet):
        self._listBullet.append(bullet)

    @property
    def listBullet(self):
        return self._listBullet

    def __str__(self):
        return '當前彈夾信息爲:%d/%d' % (len(self._listBullet), self._capacity)

    def toBullet(self):
        if self._listBullet:
            return self._listBullet.pop()
        else:
            return None


class Bullet(object):
    """創建一個子彈對象"""

    def __init__(self, lethailty):
        self._lethality = lethailty  # 子彈的殺傷力

    def lethalityToBullet(self, enemy):
        enemy.injured(self._lethality)


def main():
    """
    流程控制
    """
    # 創建一個戰士
    warrior = Person('戰士')
    # 創建一個槍的對象
    ak47 = Gun('AK47')
    # 創建一個彈夾的對象
    clip = Clip(50)
    # 創建一些子彈的對象
    for _ in range(20):
        bullet = Bullet(10)
        # 戰士把子彈裝進彈夾
        warrior.bulletToClip(bullet, clip)

    # 戰士把彈夾裝進槍
    warrior.clipToGun(ak47, clip)

    # 戰士拿槍
    warrior.getGun(ak47)

    # 創建一個敵人對象
    enemy = Person('敵人')

    # 戰士開槍打敵人
    for _ in range(len(clip.listBullet)):
        warrior.fire(enemy)
        print(warrior)
        print(enemy)


if __name__ == '__main__':
    main()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章