2013-09-05 4 views
3

Я прошел через многие ссылки, но самый простой способ понять полиморфизм с помощью python. Есть ли какие-либо простые примеры ... Из моего понимания полиморфизм - это концепция, в которой объект может принимать более одного раза. .Can любой из дайте мне знать о каких-либо простых примеров, а не сложнойПример концепции полиморфизма python

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

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

ответ

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 питон использует утку набрав для достижения полиморфизма, поиск по этой фразе, если вы хотите узнать больше.

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() 

Try думать в объектах с протоколом (набор методов) и взаимозаменяемостью между тем, с тем же протоколом.

duck typing definition из python.org:

Стиль программирования, который не смотрит на тип объекта, чтобы определить , если он имеет правильный интерфейс; вместо этого метод или атрибут просто вызывается или используется («Если он выглядит как утка и крякает, как утка, это должна быть утка».) Подчеркивая интерфейсы , а не конкретные типы, хорошо продуманный код улучшает его гибкость, позволяя полиморфное замещение. Утиная печать позволяет избежать тестов с использованием типов() или isinstance(). (Обратите внимание, однако, что утка-типизация может быть дополнена абстрактными базовыми классами.) Вместо этого обычно использует тесты hasattr() или EAFP.

Смежные вопросы