Python3面向对象----------多态

(很抱歉我还没写到多态,就有了6百多的访问量,感觉很惭愧。但是我昨天晚上10点结束笔记,只是先写了标题以做好周六自习要复习的内容,今天一打开看见空文档被阅读了600+,真是脑壳痛,话不多说,看内容)

Python3面向对象--------多态

                 其实,准确的说,Python中多态的概念并不明确。那么多态的概念是什么呢

                 多态:顾名思义,多种形态,一种事物的多种体现形式。继承是多态的前提
                            在Python中一个变量可以被赋予多种类型的值,但是前提必须保证这些类型有共同的行为,不然系统会报错

拿一个实例来说:

             案例效果:

                           小王喂过动物了!
                           猫吃鱼
                           小王喂过动物了!
                           狗吃骨头
                           小王喂过动物了!
                           兔子吃草

            分析:1.类: 人      动物(猫  狗  兔  )
                                  人:  行为: 喂           属性: 人名
                               动物:  行为:吃           属性:动物名  动物吃的食物(食物可以另起一个函数)

                         (在面向对象类的分法上有很多,不同的想法往往可以有很多做法,我这里写的是为了好介绍多态的分法)

class Person:
    def __init__(self):
        self.name=None
    def feed(self,):
        print("%s喂过动物了"%self.name)

class Animal:
    def __init__(self):
        self.name=None
    def food(self):
        self.food=None
    def eat(self):
        print('%s吃%s'%(self.name,self.food))

                       2.分析完类和类的属性和行为,接下来便是创建对象了
                          分别创建人的对象和动物的对象

                          

p=Person()
p.name='小王'
p.feed()

a=Animal()
a.name='猫'
a.food='鱼'
a.eat()

                     运行结果:小王喂过动物了
                                       猫吃鱼

                     在这个案例中,你可以为Person类的name赋予不同的值,Animal类的name和food也一样,根据不同的需求,你可以为他们赋予不同的值,这本身就是多态的一种表现,就相当于 你先让a=1 然后又让a=[1,2,,3]又或者让a={1,2,3},Python3中程序的执行顺序是从上往下,从左往右依次执行,程序的结果是编译一行执行一行。
                      再看接下来的这几行代码:
                      

p=Person()
p.name='小王'
p.feed()

b=Animal()
a=b
a.name='猫'
a.food='鱼'
a.eat()

                       上边的代码我让b成为了Animal类的对象,那么b就获得的Animal类所有的属性和行为,这时我创建了一个对象a,注意我并没有直接创建Animal类的对象a,而是把对象b赋予了对象a,那么a能不能获得Animal累的所有属性和行为呢?

                       运行结果:小王喂过动物了
                                         猫吃鱼

                       结果一样!说明a获得了对象b的属性和行为,上边说过了,一个变量可以被赋予多种类型的值,而你想让对象a获得Animal类的属性和行为,你的目的是和对象b相同的,所以对象a和对象b就具备相同行为的前提,所以对象b的属性和行为就传递给了对象a,那么如果没有具备相同行为呢?结果是怎么样的呢?我让b成为Person类的对象,然后a=b,但是对象a赋值是Animal类的属性和行为,这时,不用想,程序肯定会报错。

                       以上就是我对Python3面向对象------多态的理解,因为博主也是初学Python3,有很多东西都还停留在表层的理解,如果我的博客有任何错误,请及时评论或者私信我,我会及时更改。也欢迎同样学习Python的你愿意关注我的博客,我会把我每周的学习内容进行整理和上传,方便大家沟通和交流学习经验。

猜你喜欢

转载自blog.csdn.net/weixin_42533541/article/details/81254864