面向对象

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.鸭子类型

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

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

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

     



































































































































以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器