1.多态
python中的多态与c++和java中的多态并没有什么不同,即是对于不同的对象调用相同的方法,会呈现出不同的状态。
class Animal(object):
def say(self):
print("I am a animal !")
class Duck(Animal):
def say(self):
print("I am a Duck !")
class Dog(Animal):
def say(self):
print("I am a Dog !")
class Cat(Animal):
def say(self):
print("I am a Cat !")
以上图为例,不同的对象调用say方法,会表现出不同的行为。
duck=Duck()
duck.say()
dog=Dog()
dog.say()
cat=Cat()
cat.say()
#输出如下
I am a Duck !
I am a Dog !
I am a Cat !
I am a Duck !
I am a Dog !
I am a Cat !
2鸭子类型
如果它像鸭子一样走路,像鸭子一样叫,那么它就是一只鸭子。
--一位智者
class Animal(object):
def say(self):
print("I am a animal !")
class Duck(Animal):
def say(self):
print("I am a Duck !")
class Dog(Animal):
def say(self):
print("I am a Dog !")
class Cat(Animal):
def say(self):
print("I am a Cat !")
class Computer:
def say(self):
print("我是一台计算机!")
def fun(obj):
obj.say()
def main():
duck=Duck()
dog=Dog()
cat=Cat()
com=Computer()
fun(duck)
fun(dog)
fun(cat)
fun(com)
if __name__=="__main__":
main()
#结果
I am a Duck !
I am a Dog !
I am a Cat !
我是一台计算机!
在上述代码中加入一个函数,函数的参数是一个对象,函数的行为是调用obj对象的say()方法。不管是什么对象,只要有say()这个方法,就可以通过fun函数调用。即是不管你是什么对象,只要你像鸭子一样走路,像鸭子一样叫,你就是一个鸭子。