python面向对象编程-----多态

多态的定义:

  1. 在继承关系类中,调用父类对象的方法,实际能调用子类覆盖版本的方法
  2. 多态调用的方法与对象有关,不与类型有关
  3. python的全部对象都只有动态,没有静态(c++,java)

对上述话术的解析:

     多态可以理解为多种状态,可以理解为一个人有多种状态,在学习函数的过程中,我们发现在调用函数的时候我们永远调用的是唯一的函数,但是我们了解了继承和派生就不一样了,多态就是在继承派生的关系中,调用父类的方法,实际能调用子类覆盖版本的方法的现象叫做多态,其实多态分为两种,一种是静态,一种是动态,静态是C++,java中存在的,python中只有动态,因为python是解释执行的语言,是运行时执行的,所以可以非常简单的实现动态

首先举一个静态的列子:(只是用于说明静态时什么意思,并不是真正的静态)

class Shape:
    def draw(self):
        print('Shape.draw被调用')


class Point(Shape):
    def draw(self):
        print('Point.draw被调用')


class Circle(Point):
    def draw(self):
        print('Circle.draw被调用')


def my_draw(Circle, s):
    s.draw()


s1 = Circle()
s2 = Point()
my_draw(s1)
在静态语言当中,任何对象都有类型,如果my_draw方法中 参数s的类型时Circle中的类型,那么s.draw就一定调用Circle中的draw方法,这就是静态语言,静态就是在编译阶段就已经决定了参数s和其他类时同一个类型,是已经定死了,但是python中不一样,python没有静态语言,python的变量没有类型,一切都是在运行时决定

class Shape:
    def draw(self):
        print('Shape.draw被调用')


class Point(Shape):
    def draw(self):
        print('Point.draw被调用')


class Circle(Point):
    def draw(self):
        print('Circle.draw被调用')


def my_draw(s):
    s.draw()


s1 = Circle()
s2 = Point()
my_draw(s1)
my_draw(s2)
动态是看传进去是谁,my_draw(s1)传进去是Circle的,那么就打印Circle的方法,传进入是Piont的就是调用点的方法,也就是my_draw这个方法调用谁是不确定的,都是取决于s的类型,绑定的哪个类来决定,这种调用方法就是动态方法,也就是多态

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值