码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象

时间:2018-10-28 20:38:30      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:写代码   魔术方法   elf   bsp   飞机   继承   环境   图片   pass   

面向对象实现过的游戏有,飞机大战和斗地主等

一、封装

    封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的,也可以将具有同类属性和方法的的特性封装在一个方法中,后期维护代码比较方便.

 

class Person:

""" 默认体力100
吃饭恢复体力20
睡觉恢复体力50
学习消耗体力30
锻炼消耗体力20
"""
def __init__(self):
self.Power = 100
self.name = None

def __change_HP(self, num, action):
if num > 0:
self.Power += num
# print("正在%s,当前的体力值%d" % (action, self.Power))
if self.Power > 100:
print("体力值已经爆满,战斗力超强")
self.Power = 100
else:
print("正在%s,当前的体力值%d" % (action, self.Power))
else:
self.Power += num
if self.Power < 0:
self.Power -= num
print("体力已经用完,无法完成%s" % action)
else:
print("%s正在%s,当前恢复的体力值为%d" % (self.name, action, self.Power))




def eat(self):
self.__change_HP(20, "吃饭")
# if self.Power >= 0 and self.Power < 100:
# self.Power += 20
# print("正在吃饭,当前的体力值%d" %(self.Power))
# else:
# print("该体力值爆满,不在需要吃饭")
def sleep(self):
self.__change_HP(50, "睡觉")
# if self.Power >= 0 and self.Power < 100:
# self.Power += 50
# print("正在吃饭,当前的体力值%d" % (self.Power))
# else:
# print("该体力值爆满,不在需要睡觉")

def study(self):
self.__change_HP(-30, "学习")
# if self.Power > 30:
# self.Power -= 30
# print("正在吃饭,当前的体力值%d" % (self.Power))
# else:
# print("该体力值爆满,不在需要睡觉")

def run(self):
self.__change_HP(-45, "跑步")
# if self.Power > 45:
# self.Power -= 45
# print("正在吃饭,当前的体力值%d" % (self.Power))
# else:
# print("该体力值爆满,不在需要睡觉")



def __str__(self):
return "当前体力值为%d" % (self.Power)

p = Person()
p.name = "小明"
p.sleep()
p.run()
p.run()
p.run()

二、继承

  1.单继承

    子类继承父类所有的属性和方法(私有属性和私有方法除外),单继承一般先在自己的类中查找该方法,如果没有就去父类中调用该方法,如果父类中没有就继承object中的,子类也可以写父类中没有的方法,自己定义新的方法,


class Person:
def __init__(self):
pass

def eat(self):
print("111111")

class Person1(Person):

def eat2(self,x):
print("222222")

def __str__(self):
return "33333"

p =Person1()
p.eat1()
p.eat2()
print(p)

私有属性可以通过set和get方法来进行相对应的修改,如下:

     

class Person1:

def __init__(self):
self.__age = None
self.__name = None

def get_pwd(self):
return self.__name

def set_pwd(self, name):
self.__name = name

def get_pwd1(self):
return self.__age

def set_pwd1(self, age):
self.__age = age

p = Person1()
p.set_pwd("大帅")
a = p.get_pwd()
print(a)

  2.多继承

   多继承可以通过魔术方法__mro__查看子类的父方法 ,查看继承关系,继承分为:深度优先继承和广度优先继承(新式类和经典类)

class Animal:
pass

class Beast(Animal):
pass

class Bird(Animal):
pass

class Lion(Beast):
pass

class Tiger(Lion):
pass

class Chicken(Bird):
pass

class Duck(Chicken):
pass

class Mardainduck(Duck):
pass

三、多态

  1.基本多态

   一个对象具有多种形态,在不同的使用环境中以不同的形态展示其功能,称该对象具有多态特征

  技术分享图片

 

  2.鸭子类型

    鸭子类型是一种特殊的调用现象,当对象在语法层面能够满足调用关系,但对象并不具有对应的对象形态,称该对象此时具备鸭子类型

  鸭子类型是一种特殊的多态表现形式.

  如:我们想让个程序员写代码:这个程序员叫李刚,另一个程序员叫 "旺财".--------这就是典型的鸭子类型

     

面向对象

标签:写代码   魔术方法   elf   bsp   飞机   继承   环境   图片   pass   

原文地址:https://www.cnblogs.com/wangxiongbing/p/9863706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!