面向对象——多态

多态

1.多态和多态性

多态:指同一种事物的多种形态。比如水,可以是水蒸汽、雪、雨等多种形态。
多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象。

(1).例子一

s1 = "hello "
s2 = "world"

d1 = 500
d2 = 20

print(s1 + s2) # hello world
print(d1 + d2) # 520

站在"+"的角度去看,它并不关心左右两边操作数的类型。所以它是多态的一种表现形式,其实我们见到的有很多。

(2).例子二

# 多态:同一类事物的多种形态
import abc

class Animal(metaclass=abc.ABCMeta):  # 同一类事物:动物
    @abc.abstractmethod
    def talk(self):
        pass


class People(Animal):  # 动物的形态之一:人
    def talk(self):
        print('say hello')


class Dog(Animal):  # 动物的形态之二:狗
    def talk(self):
        print('say wangwang')


class Pig(Animal):  # 动物的形态之三:猪
    def talk(self):
        print('say aoao')
# 多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象
peo1 = People()
dog1 = Dog()
pig1 = Pig()

# 不用关心对象的类型
# peo1.talk()
# dog1.talk()
# pig1.talk()

# 实现一种接口
def func(animal):
    animal.talk()

# 不用关心参数的类型
func(peo1)
func(pig1)
func(dog1)

2. 鸭子类型

解释:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”,

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。python崇尚的就是它。

#序列类型:列表list,元组tuple,字符串str

l=list([1,2,3])
t=tuple(('a','b','c'))
s=str('hello')

# 不关注类型,只关注它是如何实现行为的
# print(l.__len__())
# print(t.__len__())
# print(s.__len__())

# def len(obj):
#     return obj.__len__()

# 不关注对象的类型,只要它依据 '鸭子类型' 像序列,那它就是序列。所以len()的参数并不关心其类型
print(len(l)) # 3
print(len(t)) # 3
print(len(s)) # 5

猜你喜欢

转载自www.cnblogs.com/ykgo/p/9351724.html