如何理解 Python 中的面向对象编程?

现如今面向对象编程的使用非常广泛 , 本文我们就来探讨一下Python中的面向对象编程 。

如何理解 Python 中的面向对象编程?

文章插图
作者 | Radek Fabisiak
译者 | 弯月 , 责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
以下为译文:
Python支持多种类型的编程范式 , 例如过程式编程、函数式编程、面向对象编程 , 而且还可以融合多种类型的范式 。
现如今面向对象编程的使用非常广泛 。面向对象编程的基本元素是对象 , 其包含的数据成员称为属性 , 函数(例程、过程)称为方法 。
对象是类的实例 。换句话说 , 类主要定义对象的结构 , 然后我们以类为模板创建对象 。类不但包含方法定义 , 而且还包含所有实例共享的数据 。
本文我们来探讨一下Python中的面向对象编程 。我们将演示如何创建类 , 并使用类来实例化对象 。本文的主要内容如下:
  • 创建Python类
  • 数据属性
  • 实例方法
  • 属性
  • 类和静态方法
  • 继承
本文无法涵盖这些主题的所有详细信息 。Python中的面向对象编程还包含其他很多方面 。希望本文能够为你学习Python及实现面向对象提供一个良好的开端 。
如何理解 Python 中的面向对象编程?

文章插图
创建Python类
我们可以使用关键字class定义Python类 , 关键字后面紧跟类的名称、分号和类的实现:
>>> classMyClass:
... pass
...
按照惯例 , Python类的命名采用首字母大写(即PascalCase) 。
现在让我们创建这个新类的一个实例 , 名为MyClass:
>>> a = MyClass
>>> a
<__main_ _.MyClass object at 0x7f32ef3deb70>
语句a = MyClass创建了MyClass的一个实例 , 并将它的引用赋值给变量a 。
我们可以通过Python内置的函数type或直接通过属性.__class__来获取类型(即对象的类) 。在拿到类(类型)之后 , 我们就可以利用属性.__ name__获取类的名字:
>>> type(a)
< class' __main__. MyClass'>
>>> a.__class_ _
< class' __main__. MyClass'>
>>> a.__class_ _.__name_ _
'MyClass'
顺便提一句 , Python类也是对象 。它们是type的实例:
>>> type(MyClass)
< class' type'>
下面 , 我们来定义一个方法 。
Python中每个实例方法的第一个参数必须对应于该实例 , 即该对象本身 。按照惯例 , 这个参数名为self 。后面是其他参数(如果有需要的话) 。在调用方法时 , 我们无需明确提供与参数self相对应的参数 。
通常 , 我们需要定义的一个最重要的方法是.__init__ 。在类的实例创建后就会调用这个方法 。该方法负责初始化类成员 。我们定义的.__init__如下:
>>> classMyClass:
... def__init__(self, arg_1, arg_2, arg_3):
... print( f'an instance of {type(self).__name__}created' )
... print( f'arg_1: {arg_1}, arg_2: {arg_2}, arg_3: {arg_3}' )
...
下面 , 我们来创建一个MyClass实例 , 看看这个初始化方法的具体工作 。我们的.__init__方法需要三个参数(arg_1、arg_2和arg_3) , 记住我们不需要传递与self对应的第一个参数 。所以 , 在实例化对象时 , 我们需要传递三个参数:
>>> a = MyClass( 2, 4, 8)
an instance ofMyClasscreated
arg_1: 2, arg_2: 4, arg_3: 8
上述声明产生的结果如下:
  • 创建一个MyClass类型的对象的实例 。
  • 自动调用该实例的方法.__init__ 。
  • 我们传递给MyClass方法的参数:(2 , 4和8)会被传递给.__init__ 。
  • .__init__执行我们的请求 , 并输出结果 。它利用type(self).__name__获取类的名称 。
现在我们得到了一个类 , 它有一个方法.__init__ , 以及这个类的一个实例 。
如何理解 Python 中的面向对象编程?

文章插图
数据属性
下面我们来修改MyClass , 增加一些数据属性 。
我们利用.__init__初始化和定义了实例 , 我们还可以在这个方法或其他实例方法中 , 通过给某个数据属性赋值的方式改变属性值:


推荐阅读