Python通过继承和in多态性

2024-06-16 08:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python2.7(googleappengine)

在学习Python之后,我发现了语言是如何使用继承来实现多态性的。在

INHERITANCE中基于PYTHON的多态性:

class pet:
  number_of_legs = None
  age = None

  def sleep(self):
    print "zzz"

  def count_legs(self):
    print "I have %s legs." % self.number_of_legs
    return self.number_of_legs


class dog(pet):
  def bark(self):
    print "woof"

doug = dog()

doug.number_of_legs = 5;

print "Doug has %s legs." % doug.count_legs()
doug.bark()

我的问题是:Python是否具有松散耦合的多态性,即使用interface而不是{}。例如,在Java中,没有祖先关系的类可以实现相同的接口。请参见下面示例中的HouseDog和{}。在

INTERFACE中基于JAVA的多态性:

^{pr2}$

问题:

再说一遍:python是否有一种面向对象的方法来实现多态性而不使用继承?在


Tags: ofselfnonenumberdefcountclassprint
1条回答
网友
1楼 · 发布于 2024-06-16 08:29:31

是的,他们叫它Duck Typing。不需要正式实现接口。Java风格的接口并不存在,因为Python有多重继承,所以如果您想定义接口,只需使用常规类作为超类型。但一般情况下,尽量避免抽象类和类的创建。在

对于您的例子,可以省略Pet接口,但是让HouseDog和{}都有getNumberOfDresses和{}方法。在多态的情况下,Python只在调用时检查方法是否存在,而不是在编译时(不存在)或加载时检查类型。最大的优势在于,当你的实现还没有完成时,你可以快速地原型化而不必担心形式。在

如果你真的想要正式的类型检查,你可以用很多方法来做,但是没有一个是官方认可的。在

相关问题 更多 >