面向对象
Posted wangxiongbing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
面向对象实现过的游戏有,飞机大战和斗地主等
一、封装
封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的,也可以将具有同类属性和方法的的特性封装在一个方法中,后期维护代码比较方便.
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.鸭子类型
鸭子类型是一种特殊的调用现象,当对象在语法层面能够满足调用关系,但对象并不具有对应的对象形态,称该对象此时具备鸭子类型
鸭子类型是一种特殊的多态表现形式.
如:我们想让个程序员写代码:这个程序员叫李刚,另一个程序员叫 "旺财".--------这就是典型的鸭子类型
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章