1 深入类和对象
1.1 鸭子类型与多态
鸭子类型
- 多态的概念四运用于Java 和 C# 这一类型语言中,而Python 崇尚鸭子类型。
a=[1,2]
b=[3,4]
c=[5,6]
d=['abc']
a.extend(b)
a.extend(c)
a.extend(d)
print(a)
class Cat(object):
def info(self):
print('i am cat')
class Dog(object):
def info(self):
print('i am dog')
class Duck(object):
def info(self):
print('i am duck')
animal_list=[Cat,Dog,Duck]
for animal in animal_list:
animal().info()
- 鸭子类型 在运行之前,Cat Dog 都是在列表里面,当作变量。
- 当运行时,加上 () 调用info 才明确 Cat 是一个类。
多态
- 定义时的类型和运行时的类型不一致,就称为多态
1.2 抽象基类(abc模块)
- 抽象基类(abstract base class ABC):抽象基类就是类定义了纯虚成员函数的类,纯虚函数只提供了接口,并没有具体实现·,抽象基类不能被实例化(不能创建对象),通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口。
- 抽象基类就是定义各种方法而不做具体实现的类,任何继承自抽象其类的类必须实现这些方法,否则无法实例化。
抽象基应用场景
- 我们去检查某个类中是否有某种方法
- 我们需要强调某个子类必须实现某些方法
检查某个类中是否有某种方法
- 定义Demo类,类中含有__len__魔法方法
- 导入抽象基类中的 Sized 类
class Demo(object):
def __init__(self,li):
self.li=li
def __len__(self):
return len(self.li)
l=['C','凌云','九折'