面试题带答案,如何理解 Python 中的面向对象编程?,Python面试八股文
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
以下为译文:
Python支持多种类型的编程范式,例如过程式编程、函数式编程、面向对象编程,而且还可以融合多种类型的范式。
现如今面向对象编程的使用非常广泛。面向对象编程的基本元素是对象,其包含的数据成员称为属性,函数(例程、过程)称为方法。
对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。
本文我们来探讨一下Python中的面向对象编程。我们将演示如何创建类,并使用类来实例化对象。本文的主要内容如下:
-
创建Python类
-
数据属性
-
实例方法
-
属性
-
类和静态方法
-
继承
本文无法涵盖这些主题的所有详细信息。Python中的面向对象编程还包含其他很多方面。希望本文能够为你学习Python及实现面向对象提供一个良好的开端。
我们可以使用关键字class定义Python类,关键字后面紧跟类的名称、分号和类的实现:
class MyClass:
… 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()如下:
class MyClass:
… 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 of MyClass created
arg_1: 2, arg_2: 4, arg_3: 8
上述声明产生的结果如下:
-
创建一个MyClass类型的对象的实例。
-
自动调用该实例的方法.init()。
-
我们传递给MyClass()方法的参数:(2,4和8)会被传递给.init()。
-
.init()执行我们的请求,并输出结果。它利用type(self).__name__获取类的名称。
现在我们得到了一个类,它有一个方法.init(),以及这个类的一个实例。
下面我们来修改MyClass,增加一些数据属性。
我们利用.init()初始化和定义了实例,我们还可以在这个方法或其他实例方法中,通过给某个数据属性赋值的方式改变属性值:
class MyClass:
… def init(self, arg_1, arg_2, arg_3):
… self.x = arg_1
… self._y = arg_2
… self.__z = arg_3
…
现在MyClass有三个数据属性:
-
.x可以获取arg_1的值
-
…_y可以获取arg_2的值
-
…__ z可以获取arg_3的值
我们可以利用Python的解包机制,用更紧凑的形式编写这段代码:
class MyClass:
… def init(self, arg_1, arg_2, arg_3):
… self.x, self._y, self.__z = arg_1, arg_2, arg_3
…
属性名称中的下划线(_)是为了表明这些属性是“私有”属性:
-
开头没有下划线的属性(比如.x)通常可供对象外部的调用和修改。
-
开头拥有一个下划线的属性(比如._y)通常也可以从对象外部调用和修改。然而,下划线是一种惯用的标志,即该类的创建者强烈建议不要使用该变量。应该仅通过类的功能成员(比如方法和属性)调用和修改该变量。
-
开头拥有双下划线的属性(比如.__ z)将在名字修饰过程中被改名(在本例中它将被改名为._MyClass__z)。你也可以通过这个新名称从对象外部调用和修改它们。但是,我强烈反对这种做法。应该尽通过类的功能成员以其原始名称进行调用和修改。
Python对象的数据属性通常存储在名为.__ dict__的字典中,它也是对象的属性之一。但是,你也可以将数据属性存储在其他地方。我们可以直接访问__dict__,或利用Python的内置函数vars()获取.__ dict__:
a = MyClass(2, 4, 8)
vars(a)
{‘x’: 2, ‘_y’: 4, ‘_MyClass__z’: 8}
a.dict
{‘x’: 2, ‘_y’: 4, ‘_MyClass__z’: 8}
名字修饰过程把键’__z’变成了’_MyClass__z’。
我们可以把.__ dict__当成普通的Python字典使用。
获取和修改与数据属性关联的值的常规方法如下:
a.x
2
a._y
4
a.__z
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘MyClass’ object has no attribute ‘__z’
a.x = 16
a.x
16
vars(a)
{‘x’: 16, ‘_y’: 4, ‘_MyClass__z’: 8}
请注意,我们无法访问.__ z,因为.__ dict__没有键’__z’。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。






既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件
工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。


四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-FBgXrUEE-1712613525358)]
更多推荐


所有评论(0)