python多态概念的例子

时间:2013-09-05 17:40:36

标签: python

我已经通过了许多链接但是使用python理解多态的最简单的方法是什么...有任何简单的例子。从我的理解多态性是一个概念,其中一个对象可以采取不止一次形式..可以任何一个让我知道任何简单的例子,而不是复杂的

http://swaroopch.com/notes/python_en-object_oriented_programming/

http://www.tutorialspoint.com/python/python_classes_objects.htm

2 个答案:

答案 0 :(得分:6)

这看起来像一个简单的例子:

http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming#Example

从维基百科文章中复制的示例:

class Animal:
    def __init__(self, name):    # Constructor of the class
        self.name = name
    def talk(self):              # Abstract method, defined by convention only
        raise NotImplementedError("Subclass must implement abstract method")

class Cat(Animal):
    def talk(self):
        return 'Meow!'

class Dog(Animal):
    def talk(self):
        return 'Woof! Woof!'

animals = [Cat('Missy'),
           Dog('Lassie')]

for animal in animals:
    print(animal.name + ': ' + animal.talk())


# prints the following:
# Missy: Meow!
# Lassie: Woof! Woof!

BTW python使用 duck typing 来实现多态,如果你想了解更多信息,可以搜索该短语。

答案 1 :(得分:1)

静态语言主要依赖继承作为实现多态的工具。 另一方面,动态语言依赖于鸭子打字。 Duck typing支持多态而不使用继承。在此上下文中,您需要在每个扩展类中实现相同的相关方法集。

来自维基百科鸭子打字页面

 class Duck:
    def quack(self):
        print("Quaaaaaack!")
    def feathers(self):
        print("The duck has white and gray feathers.")

class Person:
    def quack(self):
        print("The person imitates a duck.")
    def feathers(self):
        print("The person takes a feather from the ground and shows it.")
    def name(self):
        print("John Smith")

def in_the_forest(duck):
    duck.quack()
    duck.feathers()

def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)

game()

尝试使用协议(一组方法)考虑对象,并在具有相同协议的对象之间进行互换。

来自python.org的

duck typing definition

  

一种编程风格,它不会查看对象的类型   确定它是否具有正确的界面;相反,方法或   简单地调用或使用属性(“如果它看起来像鸭子和   像鸭子一样呱呱叫,它一定是鸭子。“)强调界面   而不是特定的类型,精心设计的代码改进了它   允许多态替换的灵活性。鸭子打字避免   使用type()或isinstance()进行测试。 (但请注意,鸭子打字   可以用抽象基类来补充。)相反,它通常是   采用hasattr()测试或EAFP编程。