认识面向对象
基本概念
面向对象(Object Oriented Programming,OOP)是一种编程思想和编程方法,它将程序中的数据和操作数据的行为封装成一个个对象,并以对象为中心来组织和设计程序。以下先普及基本面向对象的涉及概念。
对象(object)
现实世界中随处可见的事物就是对象,对象是一种客观实在的实体,比如动植物、空气等。对象是通过类定义的数据结构实例,通常将对象划分为两个部分,即静态部分与动态部分,静态部分被称为属性(property),属性是客观存在的,不能忽视,如人的性别。动态部分是指对象的方法(method),即对象的执行动作,如人的跑步,总之对象是由属性和方法组成了。
面向对象编程的基本单元。对象具有状态、行为和标识。状态指对象的属性或数据,行为指对象的方法或操作,标识指区别于其他对象的唯一身份。
类(class)
类用来描述具有相同属性和方法的对象的集合,也就是封装对象的属性和行为的载体。例如把人类群体比作person类,那么这个类具有性别、年龄、姓名等属性,具有吃饭、喝水等行为。
面向对象编程中对象的模板或蓝图,它定义了一组属性和方法,可以用来创建多个相似类型的对象。类具有封装、继承和多态等特性,可以提高代码的复用性和可维护性。
抽象(abstract)
抽象是抽取特定实例的共同特征,形成概念的过程,例如狼、狗,抽取共同特征得出”犬类“的概念过程,主要是为了降低复杂性,强调主要特征,忽视次要特征,得到简单的概念,从而让人们控制其过程或角度来了解事物的特征。
面向对象编程中一种重要的概念,它指的是将事物中的共性提取出来形成抽象类或接口,从而提高代码的可复用性和可扩展性。抽象类和接口具有约束子类必须具备哪些属性和方法的作用。
消息(message)
一个系统是由若干的对象组成,各个对象之间通过消息相互联系、相互作用。消息是一个对象要求另一个对象实施某项操作的请求
面向对象编程中对象之间进行通信的基本方式。消息是一个对象向另外一个对象发送的请求,请求包含了方法调用时传递的参数和接收结果的返回值。对象之间通过消息传递实现了相互交互和操作。
程序设计的三大特征
封装(encapsuation)
指将数据和行为包装在一起,并对外部隐藏内部细节,只暴露必要的接口供其他对象使用。封装可以提高代码的可维护性和安全性,防止外部对象意外破坏内部状态,同时也简化了其他对象与封装对象之间的交互。例如用户使用计算机只需要输入命令实现一些功能不需要知道计算机内部如何工作
继承(inheritance)
指子类可以继承父类的属性和方法,并可以在此基础上扩展出新的属性和方法。继承可以提高代码的复用性和可扩展性,同时也可以实现代码的层级结构,方便代码的组织和管理。
多态(polymorphism)
指一个对象可以表现出多种不同的形态或行为。多态可以分为编译时多态和运行时多态两种形式。编译时多态是通过函数重载、重写、模板等机制实现的,可以根据参数类型和个数在编译阶段决定调用哪个函数。运行时多态是通过虚函数、接口、抽象类等机制实现的,可以根据实际的对象类型在运行时动态地决定调用哪个方法。多态可以提高代码的灵活性和可扩展性,同时也是面向对象编程中的一个重要特性。
创建类与对象
定义类
类是对象的抽象,是一种自定义的数据类型,用于描述一组对象的共同特征和行为,类中可以定义数据成员和成员函数,数据成员用于描述对象的特征,成员函数用于描述对象的行为。在python中国可用class关键字来定义类,格式如下:
class 类名:
属性名 = 属性值
def 方法名(self):
方法体
下面是一个简单的使用案例。我们定义一个名为Person
的类,其中包含name
和age
两个属性,以及一个greet()
方法,用于打印出问候语。
class Person:
name = ""
age = 0
def greet(self):
print("Hello, my name is", self.name, "and I am", self.age, "years old.")
# 创建Person类的实例
person1 = Person()
# 设置person1的属性值
person1.name = "Alice"
person1.age = 25
# 调用person1的greet方法
person1.greet() # 输出:Hello, my name is Alice and I am 25 years old.
在上面的例子中,我们首先定义了一个名为Person
的类,并在类定义中设置了两个属性name
和age
,以及一个名为greet
的方法。
接下来,我们使用Person()
这个构造函数来创建了person1
对象,并通过person1.name
和person1.age
设置了person1
的属性值。最后,我们调用了person1.greet()
方法,输出了对person1
的问候。
对象的创建和使用
对象的创建
定义完类后并没有真正的创建一个对象,通俗理解为:定义完类以后,就相当于设计出生产机器的图纸,但没有生产具体的图纸,有了图纸就可以生产更多的机器。
class语句本身并不创建该类的任何对象,定义完类后,可以创建类的对象,格式如下:
对象名 = 类名(参数)
其中,类名
表示要创建对象的类名,()
表示调用类的构造函数,创建一个对象实例,对象名
表示创建的对象的名称。
在类中,如果定义了构造函数__init__
,则在调用类时会自动调用该函数。__init__
函数用于初始化对象的属性值。
例如,假设有如下定义的类:
class Person:
def __init__(self, name, age):
self.name = name