我已经通过了许多链接但是使用python理解多态的最简单的方法是什么...有任何简单的例子。从我的理解多态性是一个概念,其中一个对象可以采取不止一次形式..可以任何一个让我知道任何简单的例子,而不是复杂的
http://swaroopch.com/notes/python_en-object_oriented_programming/
http://www.tutorialspoint.com/python/python_classes_objects.htm
答案 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的一种编程风格,它不会查看对象的类型 确定它是否具有正确的界面;相反,方法或 简单地调用或使用属性(“如果它看起来像鸭子和 像鸭子一样呱呱叫,它一定是鸭子。“)强调界面 而不是特定的类型,精心设计的代码改进了它 允许多态替换的灵活性。鸭子打字避免 使用type()或isinstance()进行测试。 (但请注意,鸭子打字 可以用抽象基类来补充。)相反,它通常是 采用hasattr()测试或EAFP编程。