python面向对象特征(三)多态

面向对象三大特征:
1.封装:根据职责将属性和方法封装到一个抽象的类中
2.继承:实现代码的重用,相同的代码不需要重复的编写
3.多态:(以封装和继承为前提),不同的子类对象调用的相同的方法,产生不同的执行结果
人类

class Dog(object):
    def __init__(self, name):
        self.name = name
    def game(self):
        print '%s 蹦蹦跳跳的玩耍。。' % self.name
class Xiaotiandog(Dog):
    ##父类方法不能满足子类的方法,重写game方法
    def game(self):
        # 在继承时,子类拥有父类的所有属性和方法
        print '%s飞到天上玩。。。' % self.name
class Person(object):
    def __init__(self,name):
        self.name=name
    def game_with_dog(self,dog):
        print '%s和%s快乐的玩耍'%(self.name,dog.name)
        # 让狗玩耍
        dog.game()
#1.创建一个狗对象
#wangcai=Dog('旺财')
wangcai=Xiaotiandog('旺财')
#2.创建一个小明对象(小明是一个人)
xiaoming=Person('小明')
#3.让小明调用和狗玩的方法(把之前创建的狗对象传递进去)
xiaoming.game_with_dog(wangcai)

案例小结:
Person类中只需要让狗对象调用game方法(这是子类的父类中封装的方法)而不具体关心是什么狗
         game方法是在Dog父类中定义的
在程序执行时,传入不同的狗对象的实参,就会产生不同的执行效果

二、类属性

一切皆对象
类是一个特殊的对象---类对象
在程序运行的时候,类对象 (创建实例对象的模板)在内存中只有一份
通过它可以创建出很多个对象实例
除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法
1、类属性
2、类方法
通过 类名. 的方式可以直接访问类的属性

类属性:就是给类对象定义的属性
       通称用来记录与这个类相关的特征
       类属性不会用于记录与具有的对象特征

"""
定义一个工具类,每个工具都有自己的名字
需要知道使用这个类,创建了多少个工具对象
"""
class Tool(object):
    #1.使用赋值语句定义类属性,记录所有工具的数量
    count=0
    def __init__(self,name):
        self.name=name
        #让类属性+1
        Tool.count+=1
#创建工具对象
tool1=Tool('斧头')
tool2=Tool('榔头')
#输出工具对象的总数
#使用 类名.属性名 来获取
print Tool.count

三、类方法

类方法
类属性就是针对类对象定义的
    使用赋值语句在class关键字下可以定义类属性
    类属性用于记录这个类相关的特性
类方法就是针对类对象定义的方法
    在类方法内部就可以直接访问类属性或者调用其他类方法

class Toy(object):
    #使用赋值语句定义类属性,记录所有玩具的数量
    count=0
    @classmethod
    def show_toy_count(cls):
        #cls.count在类方法内部,访问当前的类属性
        print '玩具对象的数量%d'%cls.count
    def __init__(self,name):
        self.name=name
        #让类属性+1
        Toy.count+=1
#创建玩具对象
toy1=Toy('乐高')
toy2=Toy('玩具熊')
#调用类方法
Toy.show_toy_count()

猜你喜欢

转载自blog.csdn.net/qq_42711214/article/details/82715621