python中的类和对象

前言
学了python的基本类型, 语法以及常见模块, 这篇来学习一下python中的类和对象, 不做过多的解释和难以理解的文字, 简单的举一些小例子, 写一些示例代码来说明应该如何写类, 以及实例对象, 后面会随着对python的熟悉度会对类和对象有更深的理解, 学到这里之后, 就可以写一些比较像样的python脚本了, 如果你是从第一篇看到这里, 不得不说, 你很棒, 加油!!!!!!
定义
类(class):可以将类比为是一个“模板”或“蓝图”,它定义了一种数据类型的结构和行为。类是用来描述具有相同属性和功能的对象的集合。比如,我们可以定义一个”汽车”类,它包含属性(颜色、品牌、型号等)和方法(启动、加速、刹车等)。类只是一个抽象的概念,并不占用实际的内存空间。
对象(object):对象是类的一个实例(实体),它是根据类定义的具体实体化结果。比如,我们可以根据”汽车”类创建一个具体的”白色的BYD宋Pro”对象。对象是真实存在的,占用实际的内存空间。
类与对象的关系:类定义了一个模板,规定了对象的属性和行为。对象是根据类创建出来的具体实例。我们可以根据一个类创建多个不同的对象,每个对象都拥有相同的属性和方法,但具体的值可能不同。
类的属性和方法:类可以包含属性和方法。属性是类的特征或数据成员,描述对象的状态。方法是类的行为或函数成员,描述对象的行为。例如,汽车类的属性可以是颜色和型号,方法可以是启动和加速。
面向对象编程的好处:面向对象编程将问题分解为更小的、更易管理的部分,提高了代码的可重用性和可维护性。它允许我们将数据和操作封装在一起,隐藏实现的细节,使得代码更加模块化和可扩展。但同时,也会降低一点效率。
示例
创建类的标准格式
class 类名(object):
pass
1 | # -*- coding: utf-8 -*- |
这样就创建了一个Car类, 并实例化了一个my_car对象, 可以使用实例化后的对象调用类属性(brand, model, color)和调用类方法(start, accelerate, stop), 同时也可以实例化很多不同的对象
OOP三大特性
Python是一种面向对象编程(OOP)语言,它支持封装、多态和继承这些重要的OOP特性
1. 封装(Encapsulation):
封装是将数据(属性)和操作(方法)封装在一个对象中,以保护数据的安全性和完整性,同时隐藏内部实现细节。通过封装,我们可以将对象的使用和实现分开,使得代码更加模块化、易维护和易扩展。在Python中,通过使用类来实现封装,将数据属性定义为类的成员变量,将操作方法定义为类的成员方法,从而将相关的数据和操作组织在一起。
2. 多态(Polymorphism):
多态是指在不同的对象上执行相同的操作,但可以根据对象的类型,以不同的方式实现这些操作。多态可以增加代码的灵活性和可扩展性。在Python中,多态通常通过继承和方法重写来实现。如果不同的子类都实现了相同的方法,但具体的实现方式不同,那么在调用这个方法时,会根据对象的类型来执行相应的方法。
3. 继承(Inheritance):
继承是指一个类可以继承另一个类的属性和方法,从而实现代码的复用和层次化组织。继承中有两个主要的类别:基类(也称为父类或超类)和派生类(也称为子类)。派生类继承了基类的属性和方法,并可以在此基础上进行扩展和修改。在Python中,使用关键字class来定义类,并通过在类名后加括号来指定基类,从而实现继承。
示例
1 | # -*- coding: utf-8 -*- |
在上面的例子中,我们定义了一个Car类来实现封装,包含一个who()方法,但并没有具体的实现。然后我们定义了两个派生类(子类)BYDCar和ChangChengCar来继承Car类,每个派生类(子类)都重写了who()方法,实现了多态。最后,我们定义了一个who\_are\_you()函数,它可以接受不同类型的汽车对象作为参数,从而实现了多态的调用。
类的常用函数
issubclass(): 检测一个类是否是另外一个类的子类
格式1:issubclass(被检测类,父类)
格式2:issubclass(被检测类,(父类1,父类2,父类3…))
只要有一个是当前被检测的父类, 结果就为True
1 | print(issubclass(Car, ChangChengCar)) # False |
isinstance(): 检测一个对象是否是某个类的对象
格式1:isinstance(对象,类)
格式2:isinstance(对象,(类1,类2,类3…))
只要有一个是当前对象的类, 结果就为True
1 | print(isinstance(byd_car, Car)) # True |
hasattr(对象/类,’成员名’): 检测对象/类是否具有某个成员
1 | print(hasattr(byd_car, "who")) # True |
getattr(对象,’成员名’[,成员不存在时的默认值]): 获取对象/类中的成员值
1 | print(getattr(byd_car, "who")) |
setattr(对象,’成员名’,值): 设置或者添加对象/类中的成员
1 | print(setattr(byd_car, "whoo", lambda x:x)) # None |
delattr(对象,成员): 删除对象/类中的成员
1 | print(delattr(byd_car, "whoo")) # None |
dir(对象/类): 获取对象的成员名称列表
1 | print(dir(byd_car)) |
往期推荐

点个在看你最好看
