在刚接触编程时,我们就了解到编程界有两大思想:面向过程与面向对象,Python 就是一门面向对象的语言,如果你了解过面向对象的思想,自然就知道面向对象思想包含两个基本概念:类与对象 ,下面我们就一起详细学习下 Python 的类与对象吧!
1 基本概念
1.1 面向对象
面向对象是一种抽象,是一种用分类的方式看待问题的方法,用 Java 的编程思想来说就是:万物皆对象;面向对象有三大特性:封装、继承、多态。
1.2 类
上面说了面向对象是一种用分类的方式看待问题的方法,一个分类就是一个类,可以把类看作是一个抽象的模板,如:Car 类。
1.3 对象
对象是根据类创建出来的一个个实例。
2 基本使用
2.1 类的定义
# 类的定义class Car: pass
2.2 对象的创建
# 创建 Car 的实例对象 cclass Car: pass c = Car()
2.3 类中定义属性
# 定义 Car 类的属性 nameclass Car: name = 'BMW'
3 类中的方法
3.1 内置方法
Python 创建任何一个类的时候,都会包含一些内置的方法,主要包括如下:
方法 | 说明 |
__init__ |
构造函数,在生成对象时调用 |
__del__ |
析构函数,释放对象时使用 |
__repr__ |
打印,转换 |
__setitem__ |
按照索引赋值 |
__getitem__ |
按照索引获取值 |
__len__ |
获得长度 |
__cmp__ |
比较运算 |
__call__ |
函数调用 |
__add__ |
加运算 |
__sub__ |
减运算 |
__mul__ |
乘运算 |
__div__ |
除运算 |
__mod__ |
求余运算 |
__pow__ |
乘方 |
3.2 自定义方法
Python 有三种常见的方法,分别为:实例方法、类方法、静态方法,这三种方法都定义在类中。
3.2.1 类方法
类方法是将类本身作为对象进行操作的方法。
定义与使用
'''类方法(可调类变量、可被实例调用、可被类调用)1、类方法通过@classmethod装饰器实现,只能访问类变量,不能访问实例变量;2、通过cls参数传递当前类对象,不需要实例化。'''class Car(object): name = 'BMW' def __init__(self, name): self.name = name @classmethod def run(cls,speed): print(cls.name,speed,'行驶')# 访问方式1c = Car("宝马")c.run("100迈")# 访问方式2Car.run("100迈")
3.2.2 静态方法
静态方法是类中的函数,不需要实例。
定义与使用
'''静态方法(可调类变量、可被实例调用、可被类调用)1、用 @staticmethod 装饰的不带 self 参数的方法;2、静态方法名义上归类管理,实际中在静态方法中无法访问类和实例中的任何属性;3、调用时并不需要传递类或实例。'''class Car(object): name = 'BMW' def __init__(self, name): self.name = name @staticmethod def run(speed): print(Car.name,speed,'行驶') # 访问方式1c = Car("宝马")c.run("100迈")# 访问方式2Car.run("100迈")
3.2.3 实例方法
实例方法就是类的实例能够使用的方法。
定义与使用
# 实例方法(可调类变量、可调实例变量、可被实例调用)# 第一个参数强制为实例对象 self。class Car(object): name = 'BMW' def __init__(self, name): self.name = name def run(self,speed): print(self.name,speed,'行驶') # 访问c = Car("宝马")c.run("100迈")
4 类的继承
定义与使用
# 基本语法:class ClassName(BaseClassName)# 父类class Car(object): name = 'BMW' def __init__(self, name): self.name = name def run(self,speed): print(self.name,speed,'行驶') # 子类class BMWCar(Car): conf = "经济适用型" pass # 调用父类 Car 中 run 方法bc = BMWCar("BMW经济适用型轿车")bc.run("100迈")
5 类的多态
定义与使用
# 父类class Car(object): name = 'BMW' def __init__(self, name): self.name = name def run(self,speed): print('Car-->',self.name,speed,'行驶') # 子类1class BMWCar(Car): def run(self,speed): print('BMWCar-->',self.name,speed,'行驶') # 子类2class SVWCar(Car): def run(self,speed): print('SVWCar-->',self.name,speed,'行驶') # 调用 run 方法c = Car("Car")c.run("120迈") bc = BMWCar("宝马")bc.run("100迈") sc = SVWCar("大众")sc.run("80迈") # 输出结果'''Car--> Car 120迈 行驶BMWCar--> 宝马 100迈 行驶SVWCar--> 大众 80迈 行驶'''
在上面的例子中,我们可以看出:c、bc 、sc 是不同类型的对象,在它们调用 run 方法时,调用的均是各自类中的方法,这就是多态。
总结
本节给大家介绍了 Python 类与对象的定义和使用,对 Python 工程师提供了支撑,能够根据实际情况在项目中灵活使用不同类型的方法。