Я только что прочитала статью в Википедии о утином наборе , и мне кажется, что я упускаю важный момент в концепции интерфейса. используется в Java:
"When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."
class Duck:
def quack(self):
print("Quaaaaaack!")
def feathers(self):
print("The duck has white and gray feathers.")
def swim(self):
print("Swim seamlessly in the water")
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()
что, если в in_the_forest
я напишу:
шарлатан
, как утка? да ] перья
? да и позже, поскольку я знаю, что это утка, я хочу, чтобы она плавала
? john
утонет!
Я не хочу, чтобы мое приложение вылетало (случайным образом) в середине процесса только из-за того, что Джон притворился уткой, но я думаю, было бы неразумно проверять каждую отдельную атрибуты объекта, когда я его получаю ...?