精华内容
下载资源
问答
  • 在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特性,下面详细了解什么是多态。我们都知道,Python 是弱类型语言,即在使用变量时,无需为其指定具体的数据类型,这就可能出现,同一个变量会...

    在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特性,下面详细了解什么是多态。

    我们都知道,Python 是弱类型语言,即在使用变量时,无需为其指定具体的数据类型,这就可能出现,同一个变量会赋值不同的类对象,例如:class Bird:

    def move(self, field):

    print('鸟在%s' % field)

    class Dog:

    def move(self, field):

    print('狗在%s' % field)

    a = Bird()

    a.move("飞")

    a = Dog()

    a.move("跑")

    运行结果为:鸟在飞

    狗在跑

    可以看到,a 可以被先后赋值为 Bird 类和 Dog 类的对象。而在此基础上,发生多态还要满足以下 2 个前提条件:继承:多态一定是发生在子类和父类之间;重写:子类重写了父类的方法。

    因此,下面程序是对前面代码的改写:class Animal:

    def move(self,field):

    print("动物在%s" % field)

    class Bird(Animal):

    def move(self, field):

    print('鸟在%s' % field)

    class Dog(Animal):

    def move(self, field):

    print('狗在%s' % field)

    a = Animal()

    a.move("叫")

    a = Bird()

    a.move("飞")

    a = Dog()

    a.move("跑")运行结果为:

    动物在叫

    鸟在飞

    狗在跑

    此程序中,Bird 和 Dog 类都继承自 Animal 类,且都各自重写了父类的 move() 方法。从运行结果可以看出,同一个变量 a 在执行同一个 move() 方法时,由于 x 指向的对象不同,因此实际调用的并不是同一个 move() 方法,这就是多态。更多学习内容,请点击Python学习网。

    展开全文
  • 一、 什么是多态<...非动态语言必须通过继承和接口的方式来实现二、 python中的多态<1>通过继承实现多态(子类可以作为父类来使用)<2>子类通过重载父类的方法实现多态class Animal:def move...

    一、 什么是多态

    <1>一种类型具有多种类型的能力

    <2>允许不同的对象对同一消息做出灵活的反应

    <3>以一种通用的方式对待个使用的对象

    <4>非动态语言必须通过继承和接口的方式来实现

    二、 python中的多态

    <1>通过继承实现多态(子类可以作为父类来使用)

    <2>子类通过重载父类的方法实现多态

    class Animal:

    def move(self):

    print('animal is moving....')

    class Dog(Animal):

    pass

    def move(obj):

    obj.move()

    >>>move(Animal())

    >>>animal is moving....

    >>>move(Dog())

    >>>animal is moving....

    class Fish(Animal):

    def move(self):

    print('fish is moving....')

    >>>move(Fish())

    >>>fish is moving....

    三、 动态语言和鸭子类型

    <1>变量绑定的类型是不确定的

    <2>函数和方法可以接收任何类型的参数

    <3>调用方法时不检查提供的参数类型

    <4>调用是否成功有参数的方法和属性确定,调用不成功则抛出错误

    <5>不用实现接口

    class P:

    def __init__(self, x, y):

    self.x = x

    self.y = y

    def __add__(self, oth):

    return P(self.x+oth.x, self.y+oth.y)

    def info(self):

    print(self.x, self.y)

    class D(P):

    def __init__(self, x, y, z):

    super.__init__(x, y)

    self.z = z

    def __add__(self, oth):

    return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)

    def info(self):

    print(self.x, self.y, self.z)

    class F:

    def __init__(self, x, y, z):

    self.x = x

    self.y = y

    self.z = z

    def __add__(self, oth):

    return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)

    def info(self):

    print(self.x, self.y, self.z)

    def add(a, b):

    return a + b

    if __name__ == '__main__':

    add(p(1, 2), p(3, 4).info())

    add(D(1, 2, 3), D(1, 2, 3).info())

    add(F(2, 3, 4), D(2, 3, 4).info())

    四、 多态的好处

    <1>可实现开放的扩展和修改的封闭

    <2>使python程序更加的灵活

    以上这篇老生常谈python之鸭子类和多态就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • 下面我们就多态的定义、说明进行讲解,通过实例运行,找寻多态的使用注意点和优缺点。一、定义多态是指的是事物的多种状态,同一操作,由于条件的不同,所以产生的结果也不同。例如在程序中同一引用类型,由于实例的...

    我们在实现一种程序运行时,可以选择不同的数据输入其中,当然这样最后输出的结果也是不一样的。这就是多态的思想,跟我们数学中输入不同数字到公式中产出不同结果是一个道理。下面我们就多态的定义、说明进行讲解,通过实例运行,找寻多态的使用注意点和优缺点。

    一、定义

    多态是指的是事物的多种状态,同一操作,由于条件的不同,所以产生的结果也不同。

    例如在程序中同一引用类型,由于实例的不同,产生的结果也会不同。

    二、说明

    1、多态是方法的多态,多态和属性是没有半毛钱的关系的。

    2、多态存在的3个必要条件:

    (1)、必须得有继承关系

    (2)、子类必须重写了父类的方法

    (3)、父类的引用指向子类对象

    3、父类的引用指向子类对象,用该父类的引用调用子类重写的方法,此时多态就出现了

    三、实例public class Test01 {

    public static void main(String[] args) {

    // 同一引用

    Pet pet = null;

    // 由于实例不同

    pet = new Dog("旺财", 90, 80, "土狗");

    // 对同一操作产生的结果不同

    pet.eat();

    // 由于实例不同

    pet = new Penguin("小白", 90, 90, Penguin.GENDER_MAN);

    // 对同一操作产生的结果不同

    pet.eat();

    }

    }

    //我们把Dog,Penguin对Pet的eat方法呈现多态。

    四、多态调用的注意事项

    编译:成员变量,成员方法都需要看父类;父类没有编译报错;

    运行:成员变量运行父类的成员变量,成员方法运行父类重写的方法

    五、多态的好处与弊端

    好处:多态配合继承子类重写,提高了代码的复用性与扩展性

    弊端:不能调用子类特有的方法

    以上就是我们在java中对于多态内容的学习,当然这只是初步的了解,在后期文章中我们会进一步对多态展开深入的学习。

    展开全文
  • 多态是指通过基类的指针或者引用,在运行时动态调用实际绑定对象函数的行为。对于其他如C++的语言,多态是通过在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的...

    多态是指通过基类的指针或者引用,在运行时动态调用实际绑定对象函数的行为。

    对于其他如C++的语言,多态是通过在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。

    classA

    {public:virtual voidshow()

    {

    cout<

    }

    };class B:publicA

    {public:voidshow()

    {

    cout<< "B";

    }

    };intmain()

    {

    A*p = new B(); //父类指针指向子类对象

    p->show();

    }

    而在python中,可以这么写

    classA:defsay(self):print('A')classB:defsay(self):print('B')defsay(obj):

    obj.say()

    a=A()

    say(a)

    那么,它内部是怎么实现的呢?

    首先,我们先看一下Python源码中的object.h文件的顶部注释

    ce42c4c1888b93fb9513dee62d37df19.png

    在第一句里面写着,对象总是通过指针PyObject *来访问。那么什么是PyObject呢。

    在Python中,所有的东西都是对象,而PyObject里面是所有对象中所拥有的相同的内容。

    我们来看两个结构体:

    typedef struct_object {

    _PyObject_HEAD_EXTRA

    Py_ssize_t ob_refcnt;struct _typeobject *ob_type;

    } PyObject;

    typedefstruct{

    PyObject ob_base;

    Py_ssize_t ob_size;/*Number of items in variable part*/} PyVarObject;

    第一个就是PyObject,而第二个,我们根据名字就可以知道这是可变的对象的结构体,包含了一个PyObject和一个所容纳元素的个数部分。

    当我们创建一个对象时,分配内存进行初始化,这时候会用一个PyObject类型的指针变量来指向这块内存进行保存和维护。

    就像我们声明一个整数,得到整数对象,用于指向这块内存地址的,不是PyIntObject *,而是PyObject *。

    其实类型本身也是一种对象,PyTypeObject。当我们实例化一个整数对象的时候。PyIntObject的ob_type指针指向PyInt_Type,而PyInt_Type的ob_type又指向PyType_Type。而PyInt_Type和PyType_Type其实都是PyTypeObject的示例。

    所以,我们在传递对象的时候,传递的是PyObject *指针这种泛型指针,我们只能通过ob_type进行判断对象类型,通过传递泛型指针的方式,实现了Python的多态。

    展开全文
  • 跟着王进老师学开发Python系列课程:课程从0开始,讲到人工智能;按阶段授课,从基础到跑路;适合无基础的小白,也适合定制,需要哪个模块学哪个模块;包含Python语法,Django,爬虫,MySQL数据库,Web前端,人工...
  • 一、多态Python中多态是指一类事物有多种形态。比如动物有多种形态,人,狗,猫,等等。文件有多种形态:文本文件,可执行文件。二、多态性1.什么是多态性?多态性是指在不考虑实例类型的情况下使用实例,多态性分为...
  • python多态_Python多态

    2020-12-03 13:03:12
    面向对象三大特性封装根据职责将属性和方法封装到一个抽象的类中定义类的准则继承实现代码的重用,相同的代码不需要重复的编写设计类的技巧子类针对自己特有的需求,编写特定的代码多态不同的子类对象调用相同的父类...
  • python多态_python 多态

    2020-12-03 13:03:13
    第一类多态:from cat import Catfrom mouse import Mousefrom person import Person'''多态:一种事物的多种形态最终目标:人可以喂任何一种动物'''tom = Cat("tom")jerry = Mouse("jerry")tom.eat()jerry.eat()#...
  • Python作为一门面对对象的语言,那么肯定也是有多态这个属性的,这里主要跟C++的多态做一下类比先看下面的代码这里可以看到,Child,Child2都是Parent的子类,他们分别重写了父类的print_func函数,因此可以看到下面...
  • python多态_python多态

    2020-12-03 13:03:42
    多态多态与多态性多态指的是同一种事物的多种状态:水这种事物有多种不同的状态:冰,水蒸气多态性的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类。冰,水蒸气,都继承于水,...
  • python中的多态指的是让多种类若具备类似的数据属性与方法属性,都统一好命名规范,这样可以提高开发者的代码统一性,使得调用者更方便去理解。1.2 多态的目的:为了在不知道对象具体类型的情况下,统一对象调用...
  • 分享给大家供大家参考,具体如下:Python 类的继承和多态Python 类的继承在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而...
  • 面向对象的语言有四个特性,抽象、封装、继承和多态。在之前的文章中,给小伙伴们已经讲解了前三个。为什么要把多态放在最后一个讲呢?因为前面的三个特性是多态的基础,了解了前三个,了解多态就很容易啦~那么,...
  • python规范(接口类)接口类可以规范代码,但接口类本身是不实现的class Payment:def pay(self,money):raise Notlmplementedclass Wechat(Payment):def pay(self, money):print('已经用微信支付了%s元' % money)class ...
  • Python面向对象之多态1多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等(一个抽象类有多个子类,因而多态的概念依赖于继承)。class Animal(object): # 同一类事物:动物 def speak(self): pass...
  • python 多态

    2019-10-08 11:28:55
    面向对象语言的三大特性 ...2、python天生多态 python是动态的强制类型语言,数据类型不需要定义,在归一化的过程中不需要定义一个类,让其它类继承,来解决数据类型的不同 class Alipay(): def pay(self,mo...
  • python实现多态_Python

    2020-12-24 05:21:43
    Python多态教程多态就是一种事物的多种体现形式,什么是多态性多态性是指具有不同功能的在Python多态的优点增加了程序的灵活性:以不变应万变,不论对象千变万化,使用者都是同一种形式去调用。增加了程序的可扩展性...
  • c++ 多态写的很好:【转】C++三大特性之多态(详细) c++ 多态 #include <iostream> using namespace std; class Base { public: virtual void func() { cout << "base func" << endl; }...
  • 如果想温习前两个重要特性(继承和封装),可以点开:《Python面向对象教程之基本概念》、《Python面向对象教程之单继承》、《Python面向对象教程之多继承》以及《Python面向对象教程之封装》。多态从代码的角度理解...
  • 今天我们就要来说一说 Python 中的多态。所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但...
  • 面向对象有封装,继承,多态三大特性,我们在这里主要介绍python中的多态.多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述...
  • python与鸭子类型 调用不同的子类将会产生不同的行为,而无须明确知道这个子类实际上是什么,这是多态的重要应用场景。而在python中,因为鸭子类型(duck typing)使得其多态不是那么酷。鸭子类型是动态类型的一种风格...
  • 本书同名免费MOOC《Python编程基础及应用》在哔哩哔哩(B站)热播,作者带着你学。...9.8 多态、抽象类多态(polymorphism)是面向对象程序设计的一个重要概念,源自希腊语,意即“有多种形态”。对于程序设计而...
  • 在处理多态对象时,只需要关注它的接口即可,python中并不需要显示的编写(像Java一样)接口,在使用对象的使用先假定有该接口,如果实际并不包含,在运行中报错。class handGun():def __init__(self):passdef fire...
  • 会默认使用object作为该类的基类--新式类 在python2.x中定义类时,如果没有指定父类,则不会以object作为基类 今后在定义类时,如果没有父类,建议统一继承自 object class 类名 (object) pass 五、多态:...
  • Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发在SmartFile中,在工程生活方面我们已经习惯了使用很多非常棒的技术使得开发工作更加迅速并且可控(参考开放闭合原则)。通过使用一些简单的模式,我们...
  • 分享给大家供大家参考,具体如下:Python 类的继承和多态Python 类的继承在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而...
  • python 多态实例# coding:utf-8"""多态(英语:Polymorphism),是指面向对象程序运行时,相同的消息可能会送给多个不同的类之对象,而系统可依据对象所属类,引发对应类的方法,而有不同的行为。简单来说,所谓多态意...
  • 分享给大家供大家参考,具体如下:Python 类的继承和多态Python 类的继承在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,768
精华内容 3,107
关键字:

多态python

python 订阅