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()