Python的多态

实例一:

#!/usr/bin/env python
#coding:utf-8
"""
什么是多态?
1、一种类型具有多种类型的能力
2、允许不同的对象对同一消息做出灵活的反映
pytyon 中的多态
1、通过继承实现多态(子类可作为父类使用)
2、子类通过重载父类的方法实现多态
动态语言与鸭子模型
1、变量绑定的类型具有不确定性
2、函数和方法可以接收任何类型的参数
3、调用方法时不检查提供的参数类型
4、调用时是否成功由参数的方法和属性确定
5、调用不成功则抛出错误
6、Python中不用定义接口
"""
class Animal:
    def move(self):
        print ‘Animal is moving...‘
class Dog(Animal):
    pass
def move(obj):
    obj.move()
class Cat(Animal):
    def move(self):
        print ‘Cat is moving‘
class Sheep(Animal):
    def move(self):
        print ‘Sheep is moving‘
a=Animal()
move(a)
d=Dog()
move(d)
move(Sheep())
move(Cat())
a=12
a=1.2
a=Cat()
def tst(foo):
    print type(foo)
tst(3)
tst(3.3)
class M:
    def move(self):
        print ‘M is moving‘
move(M())

结果:

Animal is moving...
Animal is moving...
Sheep is moving
Cat is moving
<type ‘int‘>
<type ‘float‘>
M is moving

实例二

#!/usr/bin/env python
#coding:utf-8
class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y
 
    def __add__(self,oth):
        return Point(self.x + oth.x , self.y + oth.y)
 
    def info(self):
        print(self.x,self.y)
 
# class D3Point(Point):
#     def __init__(self,x,y,z):
#         super().__init__(x,y)
#         self.z = z
 
#     def __add__(self,oth):
#         return D3Point(self.x + oth.x , self.y + oth.y , self.z + oth.z)
 
#     def info(self):
#         print(self.x,self.y,self.z)
 
class D3Point:
    def __init__(self,x,y,z):
        self.x = x
        self.y = y
        self.z = z
 
    def __add__(self,oth):
        return D3Point(self.x + oth.x , self.y + oth.y , self.z + oth.z)
 
    def info(self):
        print(self.x,self.y,self.z)
 
 
def myadd(a,b):
    return a + b  #相同的类型才能相加,调用的是__add__方法
 
if __name__ == ‘__main__‘:
    myadd(Point(1,2),Point(3,4)).info()  #(4, 6)
    myadd(D3Point(1,2,3),D3Point(4,5,6)).info() #(5, 7, 9)
时间: 2024-11-02 13:51:33

Python的多态的相关文章

关于python中多态的理解。

学习到多态的时候,不确定自己是否完全理解了python的多态,于是Google观看了众多资料和文献,发现很多编程大佬讲得过于抽象,不便于新手理解,这违背了python的初衷:简单. 所以我在此用通俗一点的方式作了一个总结. 先贴一段代码,在python3中举例: (为了给非科班出身以及中学英语偏科的python学习者更友好的阅读体验,w3n特意添加了中文注释,可以不细看代码,通过注释阅读,主要目的是逻辑理解,代码次要) class Human(object):  # 创建"人"类 de

探索Python的多态是怎么实现的

多态是指通过基类的指针或者引用,在运行时动态调用实际绑定对象函数的行为. 对于其他如C++的语言,多态是通过在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数.如果对象类型是派生类,就调用派生类的函数:如果对象类型是基类,就调用基类的函数. class A { public: virtual void show() { cout <<"A"; } }; class B:public A { public: void s

复习python的多态,类的内部权限调用 整理

#多态的用法 class Dii: passclass Aii(Dii): def run(self): print('一号函数已调用')class Bii(Dii): def run(Dii): print('二号函数已调用')a=Aii()print('第一个run函数调用中')a.run()b=Bii()print('第二个run函数调用中')b.run() ''' 虽然Aii和Bii中有通一个run函数,但是却不会发生python的错误,而且并成功调打印出不同函数中的print里字符串,

Python:实现多态

定义一个在校人的基类,分别派生出教师和学生,然后放入列表中,实现多态. #!/usr/bin/python #Filename:inherit.py class SchoolMember: '''Represents any school member.''' def __init__(self, name, age): self.name = name self.age = age print '(Initialized SchoolMember:%s)'%self.name def tell

python oop 多态 封装 反射

python中关于OOP的常用术语 抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现这种模型.抽象不仅包括这种模型的数据属性,还定义了这些数据的接口. 对某种抽象的实现就是对此数据及与之相关接口的现实化(realization).现实化这个过程对于客户 程序应当是透明而且无关的. 封装/接口 封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数.通过任何客户端直接对数据的访问,无视接口,与封装性都是背道而驰的,除

Python面向对象 | 多态

一.多态 多态指的是一类事物有多种形态 python:a 可以接受任意数据类型,对象 默认支持多态. def func(a): pass 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello')

python基础----多态与多态性、super函数用法、继承原理

目录: 一.多态与多态性 二.super函数用法 三.继承原理 一.多态与多态性                                                                        ㈠多态: 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 1. 序列类型有多种形态:字符串,列表,元组. 2. 动物有多种形态:人,狗,猪 1 import abc 2 class Animal(metaclass=abc.ABCMeta):

【python】-多态

多态的特性:一种接口多种实现 原文地址:https://www.cnblogs.com/linalove/p/8555123.html

python继承,判断类型,多态

1.python中继承 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender 定义Student类时,只需要把额外的属性加上,例如score: class Student(Person): def __init__(self, name, gender,