Python 从设计之初就是一门面向对象的语言,Python 中的一切数据都是对象。
Python 中涉及面向对象的术语主要有:
- 类:用来描述具有相同的属性和方法的对象的集合,定义了该集合中每个对象所共有的属性和方法。类是生成对象的“模板”;
- 对象:通过类定义的数据结构实例。对象由类变量、实例变量和方法构成;
- 数据成员:类变量或者实例变量,用于处理类及其实例对象的相关的数据,又称属性;
- 类变量:同一个类的所有对象均可访问的变量,类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用;
- 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的;
- 方法:类中定义的函数;
- 实例化:创建一个类的实例,即生成类的一个具体对象;
- 继承:即一个派生类(Derived Class,也称子类)继承基类(Base Class,也称父类)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待;
- 方法重写:在子类中定义与父类同名的方法,这个过程称为方法的重写(Overwrite),又称方法的覆盖(Override)。
Python 中定义一个类的语法如下:
class 类名:
<数据成员声明 1>
...
<数据成员声明 N>
定义类后可以将其实例化得到一个对象,并通过操作对象完成目标任务,例如:
class Class1:
i = 123
def func1(self):
return 'Hello there!'
x = Class1()
print("Class1 类的属性 i 为:", x.i)
print("Class1 类的方法 func1() 输出为:", x.func1())
上述代码的运行结果如下所示:
>>> class Class1:
... i = 123
... def func1(self):
... return 'Hello there!'
>>> x = Class1()
>>> print("Class1 类的属性 i 为:", x.i)
Class1 类的属性 i 为: 123
>>> print("Class1 类的方法 func1() 输出为:", x.func1())
Class1 类的方法 func1() 输出为: Hello there!
类内部的变量分为类变量和实例变量两种,类变量的定义和普通变量一样,调用时使用的方式直接访问,类的实例也能访问类变量。实例变量则是以 self. 开头,仅供各个实例对象使用。
类名.变量名
类内部的方法分为三种:
- 实例方法:是指该类的每个实例都可以调用到的方法,只有实例能调用实例方法。与普通函数不同的是,实例方法有一个额外的第一个参数,其名称按惯例是 self。
- 类方法:是将类本身作为对象进行操作的方法,类本身和实例都可以调用类方法。定义时使用 @classmethod 进行装饰,其第一个参数是类,名称按惯例是 cls。实例方法和类方法都是依赖于 Python 的修饰器实现的。
- 静态方法:是一种存在于类中的普通函数,不会对任何实例类型进行操作,类本身和实例都可以调用静态方法,定义时以 @staticmethod 进行装饰声明。