【发布时间】:2012-11-12 17:09:24
【问题描述】:
我正在使用 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()
我的问题是: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
}
问题:
再次:python是否有面向对象的方式来实现多态而不使用继承?
【问题讨论】:
-
Python 从不通过继承实现多态性。继承是一种重用代码的方法,其定义使得结果与多态性很好。
-
我想这在技术上是正确的。谢谢。
-
@kasavbere:delnan 所说的不仅在技术上是正确的。其实是真的。
-
可能还需要指出,Java 有
interface概念的唯一原因是避免在多重继承系统中调用复杂的语义方法。从类型的角度来看,Java 中的接口do 定义了祖先关系,就像类一样。只是他们无法提供与之相匹配的方法继承。
标签: java python interface polymorphism