深入理解面向对象编程及其在Python中的应用

1 面向对象编程简介

深入理解面向对象编程及其在Python中的应用

面向对象编程——Object OrientedProgramming,简称OOP,是一种编程思想。 OOP将对象视为程序的基本单位。对象包含数据和对数据进行操作的函数。

面向过程的编程将计算机程序视为一系列命令集,即一组函数的顺序执行。为了简化编程,继续将面向过程的功能划分为子功能,即将大功能切割成小功能,以降低系统的复杂度。

面向对象编程将计算机程序视为对象的集合,每个对象都可以从其他对象接收消息并处理这些消息。计算机程序的执行是在对象之间传递的一系列消息。 。

在Python中,所有数据类型都可以被视为对象,当然对象也可以自定义。自定义对象数据类型是面向对象中类的概念。

举个例子来说明面向过程和面向对象程序流程的区别:

假设您要处理学生的成绩列表。为了表示学生的成绩,面向过程的程序可以用字典来表示:

std1 = {
    'name': 'Michael', 'score': 98 }
std2 = {
    'name': 'Bob', 'score': 81 }

处理学生成绩可以通过函数来​​实现,比如打印学生成绩:

def print_score(std):
    print('%s: %s' % (std['name'], std['score']))

如果采用面向对象的编程思想,首先要考虑的不是程序的执行过程,而是应该将Student数据类型视为一个对象。这个对象有两个属性(Property):name和score。如果要打印某个学生的成绩,必须先创建一个与该学生对应的对象,然后向该对象发送 print_score 消息,让该对象打印出自己的数据。

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def print_score(self):
        print('%s: %s' % (self.name, self.score))

向一个对象发送消息,实际上就是调用该对象对应的关联函数,这就是该对象的方法。一个面向对象的程序是这样写的:

bart = Student('Bart Simpson', 59)
lisa = Student('Lisa Simpson', 87)
bart.print_score()
lisa.print_score()

面向对象的设计思想是抽象Class,并基于Class创建Instance。面向对象的抽象层次高于函数,因为一个Class既包含数据,也包含操作数据的方法。

2 类和实例

面向对象最重要的概念是类和实例。一定要记住,类是抽象模板,比如Student类,而实例则是基于类创建的具体“对象”。每个对象都有相同的方法,但各自的数据可能不同。

仍然以Student类为例,在Python中,通过class关键字来定义一个类:

class Student(object):
    pass

课后紧接着就是班级名,即Student。类名通常是一个以大写字母开头的单词,后跟(object),表示该类继承自哪个类。通常如果没有合适的继承类,则使用对象类。 ,这是所有类最终都会继承的类。

定义Student类后,就可以基于Student类创建Student的实例了。创建实例是通过类名+()来实现的:

>>> bart = Student()
>>> bart
<__main__.Student object at 0x10a67a590>
>>> Student
<class '__main__.Student'>

可以看到,变量bart指向了Student的一个实例,后面的0x10a67a590就是内存地址。每个对象的地址不同,Student本身就是一个类。

您可以自由地将属性绑定到实例变量。例如,将 name 属性绑定到实例 bart:

>>> bart.name = 'Bart Simpson'
>>> bart.name
'Bart Simpson'

由于类可以充当模板,因此在创建实例时,可以强制填写一些认为需要绑定的属性。通过定义一个特殊的 __init__ 方法,将名称和分数等属性与它联系起来:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

请注意,__init__ 方法的第一个参数始终是 self,它代表创建的实例本身。因此,在 __init__ 方法中,可以将各种属性绑定到 self,因为 self 指向创建的实例本身。

使用 __init__ 方法,创建实例时不能传入空参数。必须传入与 __init__ 方法匹配的参数,但不需要传递 self。 Python 解释器将传入实例变量本身。 :

>>> bart = Student('Bart Simpson', 59)
>>> bart.name
'Bart Simpson'
>>> bart.score
59

与普通函数相比,类中定义的函数唯一的区别是第一个参数始终是实例变量self,调用时不需要传递该参数。除此之外,类方法与普通函数没有什么不同,因此您仍然可以使用默认参数、变量参数、关键字参数和命名关键字参数。

3 数据封装

面向对象编程的一个重要特征是数据封装。在上面的 Student 类中,每个实例都有自己的名称和分数数据。这些数据可以通过函数访问,例如打印学生的成绩:

>>> def print_score(std):
...     print('%s: %s' % (std.name, std.score))
...
>>> print_score(bart)
Bart Simpson: 59

由于Student实例本身拥有这些数据,所以要访问这些数据,可以直接在Student类内部定义访问数据的函数,从而封装“数据”。这些封装数据的函数与 Student 类本身相关联,称为类方法:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def print_score(self):
        print('%s: %s' % (self.name, self.score))

定义方法和普通函数一样,只是第一个参数是self。要调用方法,只需要直接在实例变量上调用即可。除自我外,无需通过。其他参数正常传入:

>>> bart.print_score()
Bart Simpson: 59

这样,从外面看学生时

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读