(很抱歉我还没写到多态,就有了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的你愿意关注我的博客,我会把我每周的学习内容进行整理和上传,方便大家沟通和交流学习经验。