python面向对象编程(多态)

一、多态

搜资发现目前对多态的解释有两种:

第一种

不同的子类对象调用相同的父类方法,产生不同的执行结果,多态可以增加代码的灵活度以继承和重写父类方法为前提,是调用方法的技巧,不会影响到类的内部设计。

多态的前提:

  • 要有方法重写
  • 要有继承关系
  • 父类引用指向子类对象 (父类只能调用自己的方法,但是如果自己的方法被子类覆盖了,那么调用的就是子类的。子类独有的方法,父类调用不了)  

第二种: 

多态:一类事物在不同时刻有多种形态。大致意思就是你不知道变量指向的是哪种对象,也能够对其执行操作,且操作的行为将随对象所属的类型(类)而异。   

example:(结合实例理解)

class Animal:
    def run(self):
        print('animal is running')


class People(Animal):
    def run(self):
        print('man is running')


class Pig(Animal):
    def run(self):
        print('pig is running')


        
class Dog(Animal):
    def run(self):
        print('dog is running')


people = People()
pig = Pig()
dog = Dog()


people.run()
pig.run()
dog.run()

                      结果图

 

以第一种方法理解example

People、Pig、Dog为继承Animal类的三个不同子类。这三个子类都重写了父类的run方法。当分别以这三个子类创建对象的后,调用相应的父类的run方法,则优先使用子类中重写的方法,此时产生了三种不同的输出结果(结果图)。

 

以第二种方法理解example

People、Pig、Dog为继承Animal类的不同子类,但是由于他们都是继承自父类Animal的,因而他们实际上也是属于Anmial类的(一类事物)。此时我们知道people、pig、dog这三个对象是Animal类型的,但是不用知道它们所属的确切类型(不知道变量指向的是哪种对象)就能够对这三个实例调用run()方法(能够执行操作),并且通过结果图可以发现,输出结果根据这三个实例所属的类型不同(分别是Man、Pig、Dog类)而发生变化(且操作的行为将随对象所属的类型(类)而异)。

帮助理解第二种方法,再编写一个函数,这个函数接受一个Animal类型的变量。

def run_example(animal):
    animal.run()

run_example(people)
run_example(pig)
run_example(dog)

'''此时我们只需要传入animal类型数据,并不需要它们所属的确切类型,就可以执行操作
并且你会通过结果发现,根据传入的对象所属的类型,输出结果发生变化,这就是多态的魅力'''

                结果图

参考:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820044406b227b3e751cc4d5190420d17a2dc6353000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值