Python的日常:类

Python中一切皆对象,因此类也是对象,叫“类对象”,类的实例就是对象的对象,叫做“实例对象”。

定义类的一般形式:

self用于指定当前实例,假设类ClassA的实例为a,那么基于实例a调用某个方法,如a.Test()就相当于ClassA.Test(a) 。

构造器,解构器:
Python类中的构造器(__init()__)和解构器(__del()__)对应于C++中的构造和析构函数。作用和使用方式类似。Python自带垃圾回收机制,对象实例会自动被清理,析构器一般不需要关注。定义类的时候,通常自定义构造器,利用其完成属性的初始化。

创建实例对象的时候,传入的参数要与构造器函数的形参表一致。

实例被创建后,就有了自己的名字空间。由self指定的属性是“实例”的属性,它存在于实例的空间内,self指的是实例它自己。不带self的属性则为类属性,类似于C++中的静态成员变量。显然,实例属性,仅能被实例访问,类属性则可被实例及类访问。

定义类TestClass,实例化一个对象a,a与TestClass的关系:

data3是__init()__方法中的局部变量,只在方法被调用时存活。

实例a中的data0与类TestClass中的data0引用的是同一位置:

为TestClass.data0赋值,a.data0和TestClass.data0二者都会引用到新位置:

为a.data0赋值,a.data0将引用新的位置:

常用的内建方法:

  • isinstance(a,b):判断一个实例(a)是否是某个类(b)的实例。
  • issubclass(a, b):判断一个类(a)是否是另一个类(b)的子类。
  • hasattr(a, ’b’):判断一个实例对象或类对象(a)是否具有某个属性或方法(b)。
  • super(type[, obj]):获取指定类的父类,父类必须继承自object类。

9.1. 继承

子类将继承基类的全部属性和方法。
只要是名字相同,子类的方法就可以override掉父类中的相应方法。

9.2. 运算符重载

Python中可以重载所有运算符。

查看一下内置类中的方法,可以找到相应的运算符函数,如+运算对应__add()__函数。

在自定义的类中重载+运算符:

<== index ==>