Python—面向对象

2021-06-21 11:06

阅读:479

标签:根据   封装   python   sel   style   elf   案例   game   with   

####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.静态方法:方法内部,不需要访问实例属性和类属性

 

提问:

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

答案:

应该定义实例方法

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

"""

 

Python—面向对象

标签:根据   封装   python   sel   style   elf   案例   game   with   

原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9683878.html


评论


亲,登录后才可以留言!