类的定义
python支持多重继承,在类名后面的小括号中,可以列出多个类名,以逗号分割。
__init__方法在类的实例创建后被立即调用,注意与c++中构造函数不一样,因为对象在调用__init__时已经被构造出来,__init__方法不返回值,__init__方法不是必须要定义的。
每个类方法的第一个参数,包括__init__,都是指向类的当前实例的引用。按照习惯这个参数被称为self。在__init__方法中,self指向新创建的对象,在其他的类方法中,它指向方法被调用的类的实例。尽管当定义方法时需要明确指定self,但在调用方法时,不用指定它,python会自动加上。
类的封装
python支持数据属性,它是由某个特定的类实例所拥有的数据。要从类外的代码引用这个属性,需要用实例的名字限定它,instance.data,要在类的内部引用一个数据属性,使用self作为限定符。习惯上,所有的数据属性都在__init__方法中初始化为有意义的值,然而这并不是必须的,因为数据属性和局部变量一样,当首次赋给它值的时候突然产生。
类属性
类属性紧跟在类定义后定义,数据属性定义在__init__方法中,类属性可以作为类级别的常量来使用,但它们不是真正的常量,可以修改它们。类属性既可以通过直接对类的引用,也可以通过对类的任意实例的引用来使用。
class counter:
count=0
def __init__(self):
self.__class__.count+=1
每次创建一个counter类的对象时,count的值加1
私有函数
一个python函数或属性的名字以两个下划线开始(但不是结束),它是私有的,其他所有的都是共有的,python方法没有类方法保护的概念(只能用于它们自己的类和子类中)。类方法或者是私有(只能在它们自己的类中使用)或者是共有(任何地方都可使用)。
在python中,所有的专用方法和内置属性遵守一个标准的命名习惯:开始和结束都有两个下划线。不要对自己的方法和属性用这种方法命名。