Python多态

多态:在编辑时无法确定状态,在运行时才确定。由于Python为动态语言,参数类型没定,所以本身即是多态的

1:由继承实现多态

 1 class Animal:
 2     def move(self):
 3         print(‘Animal is moving‘)
 4
 5 class Dog:
 6     def move(self):
 7         print(‘Dog is running‘)
 8
 9 class Fish:
10     def move(self):
11         print(‘Fish is swimming‘)
12
13 Animal().move()
14 Dog().move()
15 Fish().move()

结果:

Animal is moving
Dog is running
Fish is swimming

2:通过重载实现多态

1 #在子类中:
2
3 class child:
4     def start(self):
5         print(‘....‘)
6         super().start()
7         print(‘......‘)

3:动态语言特性(参数类型不定)与鸭子模型

例子1:类实例为参数

class Animal:
    def move(self):
        print(‘Animal is moving‘)

class Dog:
    def move(self):
        print(‘Dog is running‘)

class Fish:
    def move(self):
        print(‘Fish is swimming‘)

def move(obj):        #obj为实例参数
    obj.move()

move(Animal())
move(Dog())
move(Fish())

----------------类作为参数-------------

class Moveable:
    def move(self):
        print(‘Move...‘)

class MoveOnFeet(Moveable):
    def move(self):
        print("Move on Feet.")

class MoveOnWheel(Moveable):
    def move(self):
        print("Move on Wheels.")

#-------------------------------------------------------------------

class MoveObj:
    def set_move(self,moveable):                                #moveable为类
        self.moveable = moveable()

    def move(self):
        self.moveable.move()                               #通过moveable实例调用到不同的类

class Test:
    def move(slef):
        print("I‘m Fly.")

if __name__ == ‘__main__‘:
    m = MoveObj()

    m.set_move(Moveable)
    m.move()

    m.set_move(MoveOnFeet)
    m.move()

    m.set_move(MoveOnWheel)
    m.move()

    m.set_move(Test)
    m.move()

结果:

Move...
Move on Feet.
Move on Wheels.
I‘m Fly.

例子2:函数名为参数

def movea():
print(‘Move a.‘)

def moveb():
print(‘Move b.‘)

class MoveObj:
def __init__(self,moveable): #moveable为函数参数
self.moveable = moveable #绑定函数名参数
self.moveable() #调用函数

if __name__ == ‘__main__‘:
a = MoveObj(movea)
b = MoveObj(moveb)

结果:

move a

move b

时间: 2024-10-12 07:22:31

Python多态的相关文章

Python 多态

类的多态 多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针. 那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重用.而多态则是为了实现另一个目的--接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用"家谱"中

python 多态实例

# coding:utf-8"""多态(英语:Polymorphism),是指面向对象程序运行时,相同的消息可能会送给多个不同的类之对象,而系统可依据对象所属类,引发对应类的方法,而有不同的行为.简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之.在面向对象程序设计中,多态一般指子类型多态(Subtype polymorphism). 上面的定义有点让初学者费解,黄哥用"打开"这个动作来描述面向对象的多态."打开",可以

Python多态和多态性

引用于:http://www.cnblogs.com/linhaifeng/articles/7340687.html Python中多态是指一类事物有多种形态.比如动物有多种形态,人,狗,猫,等等. import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): p

python多态和鸭子类型

多态 多态是同一个行为对于不同的对象具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现. 比如 我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档: 如果当前在 Word 下弹出的就是 Word 帮助: 在 Windows 下弹出的就是 Windows 帮助和支持. 同一个事件发生在不同的对象上会产生不同的结果. 文件有多种形态:文本文件,可执行文件 import abc # 抽象类 class File(metaclass=abc.AB

python 多态这一部分的知识点相关应用

类型这块 type 一个对象的时候,这个对象的类型,总是这个对象所属的类 type任何一个类,它的类型都是type,type是所有数据类型和类的鼻祖 type的类型是它本身 type  = type(type) 函数的类型就是函数 python是一种动态语言,一个鸭子类型举例:动态python变量,在赋值的时候,赋值号(=)右边的数据类(list,set,float等)对象是什么类型,他就是什么类型 a. 常规创造的类 总是有几个特性: 能够实例化 能有属性 能有方法 b.元类能够帮助你创造不同

Python——多态、检查类型

一.多态 Python变量并不需要声明类型,同一个变量可以在不同的时间引用不同的对象,当一个变量在调用同一个方法,可以呈现出多种行为,而具体呈现出哪种行为由该变量引用的对象来决定,这就是多态. 先看一下以下例子: class Dog: def behavior(self,skill): print ('小狗会%s!'%skill) class Cat: def behavior(self,skill): print ('小猫会%s!'%skill) class Host: def pet(sel

python\多态与多态性

1.多态的概念:多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的的概念依赖于继承) 比如:序列类型有多种形态:字符串,列表,元组 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hell

Python——多态

""" 多态的特性是调用不同的子类将会产生不同的行为,而无需明确知道这个子类实际上是什么 """ class AudioFile:     def __init__(self, filename):         if not filename.endswith(self.ext): #检测来自子类的ext变量是否以按指定的格式结尾,如果不是则引发异常             raise Exception("Invalid file

Python:多态(一个接口多种实现)

class Animal(object):----def init(self,name):--------self.name=name def talk(self): pass @staticmethod def animal_talk(obj): #动物叫的接口 obj.talk() class Cat(Animal):----def talk(self):--------print("mow!")class Dog(Animal):----def talk(self):------