类与对象的深入

鸭子类型

多态概念用于Java和C#这一类强语言中,而python崇尚鸭子类型,鸭子类型即不严格要求类型,比如a.extend(b)是将b链接到a后面,a为列表时,b是列表元组字符串都可以加到后面。
比如a,b,c是三个类的名字,list=[a,b,c]
此时a,b,c是作为变量储存在列表中,只有当他写成a().内置函数时()他才和被作为一个类。

抽象基类(abc模块)

抽象基类就是类里定义了纯虚数的类,其不能被实例化(不能创建对象)不能被继承。
用于检查类中是否存在某种方法,和强制重写。
从abc中调用Sized模块:from collection.abc import Sized,含有__len__模块则是Sized的子类,不过因Sized是抽象基类,所以不会继承Sized模块的功能。
当import abc后,在定义类时可以:
class 类名(metaclass=abc.ABCMeta)(括号内的意思是指定继承的元类)
之后可以在方法前加@abc.abstractmethod来将方法变成抽象基类。
调用抽象基类时,实例化的时候就会检测异常。
主动用raise 异常名,抛出异常,实例化的时候才会检测。

类对象的深入

is比较对象,==比较值
当对象自己有实例属性时就会直接输出自己的,如果没有就会向上查找类中是否有,类不能向下查找属性。
print(类名.mro)可以输出类和他父类的分级的查找顺序。(MRO缩写意思有多区域运行;维修,修理服务)
print(实例对象.dict)会以字典形式输出。必须要可以组成键值对
print(dir(实例对象))会输出类和父类所含有的所有方法,也会考虑到继承的成员。
hasattr(对象,属性名)判断对象是否含有该属性,返回布尔值。

你可能感兴趣的:(类与对象的深入)