kas*_*ere 0 python java polymorphism interface
我正在使用 Python 2.7(谷歌应用引擎)
学习了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()
Run Code Online (Sandbox Code Playgroud)
我的问题是:Python 是否具有松散耦合的多态性,即使用interface而不是inheritance. 例如,在 Java 中,没有祖先关系的类可以实现相同的接口。见HouseDog和PetRock下面的例子。
INTERFACE基于多态性在JAVA:
class Animal{
int legs;
double weight;
public int getLegs(){return this.legs;}
public double getWeight(){return this.weight}
}
interface Pet{
public int getNumberOfDresses();
public int getNumberOfToys();
}
class HouseDog extends Animal implements Pet{
//... implementation here
}
class PetRock implements Pet{
//a rock and a dog don't really have much in common.
//But both can be treated as pets
}
Run Code Online (Sandbox Code Playgroud)
题:
再次:python 是否有面向对象的方式来实现多态而不使用继承?
是的,他们称之为Duck Typing。无需正式实现接口。Java 风格的接口不存在,因为 Python 具有多重继承,所以如果要定义接口,只需使用常规类作为超类型即可。但是,一般来说,人们避免创建完全抽象的基类,而是利用鸭子类型。
对于您的示例,可以省略Pet接口,但 letHouseDog和PetRockboth havegetNumberOfDresses和getNumberOfToys方法。在多态情况下,Python仅在调用时检查方法是否存在,而不是在编译时(不存在)或加载时检查类型。最大的优势是让您可以在您的实现尚未完成时快速进行原型设计,而无需担心形式主义。
如果您确实想要正式的类型检查,您可以通过多种方式获得它,但没有一种是官方认可的。
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |