类
__varname__() :会被Python解释器自动调用
a + b 相当于 a.__add__(b)
l1 = [1,2,3] 相当于 l1 = list([1,2,3])
创建实例时,Python会自动调用类中的__init__方法,以隐性的为实例提供属性
__init__方法被称为构造器
如果类中没有定义__init__方法,实例创建之初仅是一个简单的名称空间
__del__方法叫做析构器
类的特殊属性:
可以使用类的__dict__字典属性或Python内置的dir()函数来获取类的属性
A.__name__ :类A的名字
A.__doc__ :类A的文档字符串
A.__bases__ :类A的所有父类构成的元组
A.__dict__ :类A的属性
A.__module__:类A定义所在的模块
A.__class__ :实例A对应的类
实例属性:
实例仅拥有数据属性(严格意义上来说,方法是类属性)
通常通过构造器"__init__"为实例提供属性
这些数据属性独立于其它实例或类
实例释放时,其属性也将被清除
内建函数dir()或实例的特殊属性__dict__可用于查看实例属性
I.__class__ :实例化I的类
I.__dict__ :I的属性
Python类方法中可用的变量:
方法的可用变量
实例变量:指定变量名称及实例自身进行引用
self.变量名
局部变量:方法内部创建的变量,可直接使用
类变量(也称静态变量):通过指定变量名与类名进行引用
类名.变量名
全局变量:直接使用
继承
- 继承描述了基类的属性如何“遗传”给派生类
- 子类可以继承它的基类的任何属性,包括数据属性和方法
- 一个未指定基类的类,其默认有一个名为object的基类
- Python允许多重继承
创建子类:
创建子类时,只需要在类名后跟一个或从其中派生的父类
class SubClassName(ParentClass1[,ParentClass2,...])
'optional class documentatioon string'
class_suite
子类可以继承它的基类的任何属性,包括数据属性和方法
Python类的继承和属性搜索:
Python中几乎所有属性的获取都可以使用“object.attribute”的格式
不过,此表达式会在Python中启动搜索---搜索连续的树
class语句会产生一个类对象,对class的调用会创建实例,实例自动连结至创建了这些实例的一个或多个类
类连结至其超类的方式:
将超类列在类头部的括号内,其从左至右的顺序会决定树中的次序
由下至上,由左至右
继承方法专用化:
- 继承会先在子类寻找变量名,然后才查找超类,因此,子类可以对超类的属性重新定义来取代继承而来的行为
- 子类可以完全取代从超类继承而来的属性
- 也可以通过已覆盖的方法回调超类来扩展超类的方法
类、实例和其他对象的内建函数:
issubclass()
布尔函数,判断一个类是否由另一个类派生,语法:
issubclass(sub,sup)
isinstance()
布尔函数,判断一个对象是否是给定类的实例,语法:
isinstance(obj1,class_obj2)
hasattr()
布尔函数,判断一个对象是否拥有指定的属性,语法:
hasattr(obj,'attr')
同类的函数还有getattr(),setattr(),delattr()
super()
在子类中找出其父类以便于调用其属性
一般情况下仅能采用非绑定方式调用祖先类方法
而super()可用于传入实例或类型对象,语法:
super(type[,obj])