概要
文章围绕面向对象,讲解了Pyhton的类以及面向对象的三大特性,封装、继承、多态。
一、类的使用
1.1 定义类
1.1.1 方法__init__()
这是Python用来初始化类的方法,也称作构造方法。它的参数除了你想要初始化的变量和想要做的操作,还有一个self参数。
1.1.2 self参数
在Python类的所有方法的参数列表中,开始的第一个参数一定是self,他是一个指向对象本身的引用,可以通过他来访问类中的变量和方法。self参数无需传值,只需要在定义的时候写在参数列表的第一位即可。
以下是一个示例:
class Student:
def __init__(self, name, number):
self.name = name
self.number = number
def getInfo(self):
print(self.name, self.number)
在变量前加上self,这时形参name的值会存储到变量name中,然后变量name会关联到当前创建的对象。
1.1.3 isinstance()函数
可以用该函数判断某一对象是否为某个类的实例。
二、面向对象的特性
2.1 封装
封装即将数据和操作封装到一起,通过控制访问权限,可以将实现细节隐藏对外只表现出接口供外界调用。
2.1.1 变量的访问权限
Python当中并没有严格限制变量的访问权限,这与其他的面向对象语言有所不同,Python的访问权限表示主要通过变量名或函数名来识别。以‘ _ ’开头的为protected成员,以‘ __ ’开头的是private成员,以‘ __ ’开头结尾的通常是系统定义的特殊成员。
类型 | 权限 |
---|---|
private | 私有成员只有自身的方法能访问 |
protected | 受保护的成员只有自身的方法和子类的方法可以访问 |
default | 默认成员在一个包内的方法可以访问 |
public | 公用成员任何方法都可以访问 |
2.1.2 静态
1)静态变量(类变量):不是在init函数中初始化的变量,而是在类定义中直接声明赋值的变量称作静态变量,他是属于类的,可以通过类名直接调用,所有对象共享。
2)实例方法:普通定义的类方法。
3)类方法(@classmethid):类方法是属于类的方法,可以调用类的类变量,但是不能调用实例变量。用装饰器@classmethid声明。
4)静态方法(@staticmethod):静态方法不访问任何类的属性和方法,用装饰器@staticmethod修饰。
2.2 继承
继承需要父类和子类须在同文件中且在子类前面定义。由于子类继承不会调用父类的构造方法,所以需要子类自行调用,定义子类时在类名后面加括号,括号内写父类的名字,子类的init方法先调用父类的init方法再初始化自身的属性。
class parent():
pass
class child(parent):
def __init__(self, ...):
super.__init__(父类初始化的参数列表)
#初始化自身属性
2.3 多态
多态指的是子类对象可以传给需要父类类型参数的函数,这时同一个函数表现出什么状态就取决于子类对象的性质。比如Python的运算符重载。