• Python—面向对象2


    ####python的面向对象###

    1.面向对象的三个特征:封装,继承,多态

    2.多态:不同的子类对象调用相同的方法,产生不同的执行结果

    示例:

    class Dog(object):

        def __init__(self,name):

            self.name = name

        def game(self):

            print '%s蹦蹦跳跳的玩'%self.name

    class xiaotiandog(Dog):

        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()      ##调用相同的方法,产生的结果不同

    #wangcai = Dog('旺财')

    wangcai = xiaotiandog('旺财')   ##这两个不同的对象

    xm = Person('小明')

    xm.game_with_dog(wangcai)

    """

    案例小结:

    Person类中只需要让狗调用game方法(这就是子类的父类中封装的方法),而不关心具体是什么狗

            game方法是在Dog父类中定义的

    在程序执行时,传入不同的狗对象的实参,就会产生不同的执行效果

    """

    3.面向对象三大特征:

    (1).封装:根据职责将属性和方法封装到一个抽象的类中

    (2).继承:实现了代码的复用,相同的代码不需要重复的编写

    (3).多态:(以继承和封装为前提),不同的子类对象调用相同的方法,产生不同的执行结果

    示例:

    人类:

    work方法:

    程序员   设计师

    不同的对象,调用相同的方法,会产生不同的结果

    """

    4.类属性:类属性就是针对类对象定义的,通过赋值语句在class关键字下可以定义类属性,类属性用于记录与这个类相关的特征。

    python中,一切皆对象

    类是一个特殊的对象————类对象

    在程序运行的时候,类对象(创建实例对象的模板)

    在内存中只有一份,通过它可以创建出很多个对象实例

    除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法

    1)类属性

    2)类方法

    通过 类名. 的方式可以直接访问类的属性

    类属性:就是给类对象定义的属性

        通常用来记录与这个类相关的特征

        类属性不会用来记录具体的对象特征

    示例:

    class Toy(object):

        #通过赋值语句定义类属性,记录所有玩具的数量

        count = 0

        def __init__(self,name):

            self.name = name

            #让类属性加1   类属性的调用方法 类名.类属性或者类方法

            Toy.count += 1

    #创建工具对象

    tool1 = Toy('斧头')

    tool2 = Toy('榔头')

    print Toy.count    ##类属性的调用方法 类名.类属性或者类方法

    5.类方法:类方法就是针对类对象定义的方法,在类方法内部就可以直接访问类属性或者调用其他类方法。

    示例:

    class Toy(object):

        #使用赋值语句定义类属性,记录所有玩具的数量

        count = 0

        @classmethod   ##这个就是类方法

        def show_toy_count(cls):

    #cls.count 就是在类方法内部,访问当前的类属性

            print '玩具对象的数量:%d'%cls.count

        def __init__(self,name):

            self.name = name

            Toy.count += 1

    tool1 = Toy('乐高')

    tool2 = Toy('玩具熊')

    Toy.show_toy_count()

    6.静态方法:

        在开发的时候,如果需要在类中封装一个方法,这个方法

        既不需要访问实例属性或者调用实例方法,

        也不需要访问类属性或者调用类方法

        这个时候,我们就可以把这个方法封装成一个静态方法

    示例:

    class Cat(object):

        #不访问实例属性/类属性

        @staticmethod

        def call():

            print '喵喵~'

    #通过 类名. 调用静态方法

    #不需要创建对象,就可以直接使用

    Cat.call()

    7.类的结构

    术语--实例

    1.使用面向对象开发,第一步就是设计类

    2.使用 类名() 创建对象,创建对象的动作有两步

        1.在内存中为对象分配空间

        2.调用初始化方法__init__为对象初始化

    3.对象创建后,内存中就有了一个对象的实实在在的存在--实例

    因此:

        1.创建出来的对象叫做类的实例

        2.创建对象的动作叫做实例化

        3.对象的属性叫做实例属性

        4.对象调用的方法叫做实例方法

    在程序执行时:

        1.对象各自拥有自己的实例属性

        2.调用对象的方法,可以通过self

            访问自己的属性

            调用自己的方法

    8.练习

    1).设计一个Game类

    2).属性

        定义一个属性top_score记录游戏的历史最高分(类属性)

        定义一个属性player_name记录当前游戏玩家的姓名(实例属性)

    3).方法:

        show_help显示游戏的帮助信息(静态方法)

        show_top_score显示历史最高分(类方法,访问类属性)

        start_game开始当前玩家的游戏(实例方法)

    代码:

    class Game(object):

        top_score = 0

        @classmethod

        def show_top_score(cls):

            print '历史最高分数是:%d'%cls.top_score

        #实例属性在初始化方法内部定义

        def __init__(self,player_name):

            self.name = player_name

        def start_game(self):

            print '%s开始游戏'%self.name

        @staticmethod

        def show_help():

            print '帮助信息'

    #查看帮助信息

    Game.show_help()

    #查看历史最高分数

    Game.show_top_score()

    #创建游戏对象,开始游戏

    xm = Game('小明')

    xm.start_game()

    """

    案例小结:

    1.实例方法--方法内部需要访问实例属性

        实例方法内部可以使用 类名.访问类属性

    2.类方法:方法内部‘只’需要访问类属性

    3.静态方法:方法内部,不需要访问实例属性和类属性

     

    提问:

    如果方法内部 即需要访问实例属性,又需要访问类属性,应该定义什么方法?

    答案:

    应该定义实例方法

    因为,类只有一个,在实例方法内部可以使用类名,访问类属性

    """

  • 相关阅读:
    Go语言开发Windows应用
    go 调用windows dll 的方法
    thinkPHP5 命名空间别名
    thinkPHP5 类库包注册
    thinkphp5 默认配置代码
    edusoho twig 引入文件功能
    edusoho 查找网址对应的控制器和模板页面
    启动Nginx 出现 nginx: [emerg] unknown directive "锘?user" 错误
    eduSOHO 首页模板 全部课程模块代码
    twig 模板控制器对应列表
  • 原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9683878.html
Copyright © 2020-2023  润新知