华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(三)

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本


文章目录

本文是Python面试专栏的第三篇。在本专栏中,我将总结华为、阿里巴巴、字节跳动等互联网公司 Python 面试中最常见的 100+ 问题。每道题都提供参考答案,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及 Python 基础知识、Python 编程、数据分析以及 Python 函数库等多个方面。

Python 面试的高阶问题

39. 简述面向对象的三大特性?

面向对象编程(Object-Oriented Programming,OOP)有三大特性,分别是封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。

  • 封装(Encapsulation):

    • 封装是指将数据和操作(方法)组合在一起形成一个独立的单元,对外部隐藏内部实现细节。通过封装可以保护数据的安全性,只能通过预定义的接口(方法)访问和修改数据。
    • 封装可以使代码更加模块化和可维护,减少了对外部的依赖性,提高了代码的可重用性和安全性。
  • 继承(Inheritance):

    • 继承是指一个类(子类)可以继承另一个类的属性和方法,从而避免了重复编写相同的代码。被继承的类称为父类或基类,继承的类称为子类或派生类。
    • 通过继承,子类可以拥有父类的属性和方法,并且可以在此基础上进行扩展或修改。
  • 多态(Polymorphism):

    • 多态是指同一种操作或方法可以应用于不同类型的对象,而产生不同的行为。通过多态,可以以统一的方式对不同的对象进行操作,无需关心对象具体的类型。
    • 多态性使得程序更加灵活和可扩展,可以通过定义抽象类、接口或基类来实现统一的方法签名,然后由不同的子类实现自己的具体行为。这样可以提高代码的可读性、可维护性和可扩展性。

这三大特性是面向对象编程的基础,共同支持着代码的重用、封装和抽象,使得我们能够以更高效和结构化的方式进行软件开发。

40. 如何在 Python 中创建类?

要在 Python 中创建类,我们使用关键字 class,如下例所示:

class MLPEmployee:
   def \_\_init\_\_(self, emp_name):
       self.emp_name = emp_name

要从上面创建的类实例化或创建对象,我们执行以下操作:

emp_1 = MLPEmployee("Mr Employee")

要访问 name 属性,我们只需使用 . 运算符调用该属性,如下所示:

print(emp_1.emp_name)
# Print Mr Employee

为了在类中创建方法,我们将方法包含在类的作用域下,如下所示

class MLPEmployee:
   def \_\_init\_\_(self, emp_name):
       self.emp_name = emp_name
       
   def introduce(self):
       print("Hello I am " + self.emp_name)

__init__introduce 函数中的 self 参数表示对当前类实例的引用,该实例用于访问该类的属性和方法。

self 参数必须是类中定义的任何方法的第一个参数。可以访问类 MLPEmployee 中的方法,如下所示:

emp_1.introduce()

整个基本的类的创建示例如下:

class MLPEmployee:
   def \_\_init\_\_(self, emp_name):
       self.emp_name = emp_name
       
   def introduce(self):
       print("Hello I am " + self.emp_name)
       
# create an object of MLPEmployee class
emp_1 = MLPEmployee("Mr Employee")
print(emp_1.emp_name)    #print employee name
emp_1.introduce()        #introduce the employee

在 Python 中,类是面向对象编程的基本组件之一,它允许我们创建具有属性和方法的自定义数据类型。

41. 有什么方法可以获取类的所有属性和方法?

在 Python 中,可以使用内置函数 dir() 来获取类的所有属性和方法dir() 函数返回一个列表,包含了指定对象(包括类)所拥有的所有有效属性和方法的名称。

以下是一个示例代码,展示了如何使用 dir() 函数获取类的所有属性和方法:

class MyClass:
    def \_\_init\_\_(self):
        self.name = "Alice"

    def greet(self):
        print("Hello, my name is", self.name)

    def say\_hello(self):
        print("Hello!")

obj = MyClass()

print(dir(obj))

运行上述代码,会输出包含了 MyClass 类的所有属性和方法的列表,例如:

['\_\_class\_\_', '\_\_delattr\_\_', '\_\_dict\_\_', '\_\_dir\_\_', '\_\_doc\_\_', '\_\_eq\_\_', '\_\_format\_\_', '\_\_ge\_\_', '\_\_getattribute\_\_',
'\_\_gt\_\_', '\_\_hash\_\_', '\_\_init\_\_', '\_\_init\_subclass\_\_', '\_\_le\_\_', '\_\_lt\_\_', '\_\_module\_\_', '\_\_ne\_\_', '\_\_new\_\_', 
'\_\_reduce\_\_', '\_\_reduce\_ex\_\_', '\_\_repr\_\_', '\_\_setattr\_\_', '\_\_sizeof\_\_', '\_\_str\_\_', '\_\_subclasshook\_\_', '\_\_weakref\_\_', 
'greet', 'name', 'say\_hello']

需要注意的是,dir() 函数不仅适用于类对象,也可以用于其他对象、模块以及内置类型等。它返回的列表可能包含一些特殊命名的属性和方法,以双下划线开头和结尾的属性和方法,这些通常是 Python 内部定义的特殊成员。

42. 继承在 Python 中是如何工作的?

在 Python 中,继承(Inheritance)是一种实现代码重用和建立类之间关系的机制。通过继承,一个类(称为子类或派生类)可以从另一个类(称为父类或基类)继承属性和方法。

Python 支持不同类型的继承,包括:

  • 单一继承:子类派生一个父类的成员。

在这里插入图片描述

# Parent class
class ParentClass:
	def par\_func(self):
     	print("I am parent class function")
# Child class
class ChildClass(ParentClass):
	def child\_func(self):
     	print("I am child class function")
# Driver code
obj1 = ChildClass()
obj1.par_func()
obj1.child_func()

  • 多层继承:父类 A 由子类 B 继承,子类 B 再由另一个子类 C 继承。基类和派生类的功能进一步继承到新的派生类 C 中。在这里,A 是 C 的祖父类。

在这里插入图片描述

# Parent class
class A:
    def \_\_init\_\_(self, a_name):
        self.a_name = a_name


# Intermediate class
class B(A):
    def \_\_init\_\_(self, b_name, a_name):
        self.b_name = b_name
        # invoke constructor of class A
        A.__init__(self, a_name)


# Child class
class C(B):
    def \_\_init\_\_(self, c_name, b_name, a_name):
        self.c_name = c_name
        # invoke constructor of class B
        B.__init__(self, b_name, a_name)

    def display\_names(self):
        print("A name : ", self.a_name)
        print("B name : ", self.b_name)
        print("C name : ", self.c_name)


# Driver code
obj1 = C('child', 'intermediate', 'parent')
print(obj1.a_name)
obj1.display_names()

  • 多重继承:当一个子类从多个父类派生成员时,就会实现这一点。 子类继承了父类的所有功能。

在这里插入图片描述

# Parent class1
class Parent1:
   def parent1\_func(self):
       print("Hi I am first Parent")

# Parent class2
class Parent2:
   def parent2\_func(self):
       print("Hi I am second Parent")

# Child class
class Child(Parent1, Parent2):
   def child\_func(self):
       self.parent1_func()
       self.parent2_func()

# Driver's code
obj1 = Child()
obj1.child_func()

  • 分层继承:当一个父类由多个子类派生时,称为分层继承。

在这里插入图片描述

# Base class
class A:
    def a\_func(self):
        print("I am from the parent class.")


# 1st Derived class
class B(A):
    def b\_func(self):
        print("I am from the first child.")


# 2nd Derived class
class C(A):
    def c\_func(self):
        print("I am from the second child.")


# Driver's code
obj1 = B()
obj2 = C()
obj1.a_func()
obj1.b_func()  # child 1 method
obj2.a_func()
obj2.c_func()  # child 2 method

43. 如何访问子类中的父类成员

以下是 Python 访问子类中的父类成员的方法:

  • 通过使用父类名:可以使用父类的名称来访问属性,如下例所示:
class Parent(object):
    # Constructor
    def \_\_init\_\_(self, name):
        self.name = name


class Child(Parent):
    # Constructor
    def \_\_init\_\_(self, name, age):
        Parent.name = name
        self.age = age

    def display(self):
        print(Parent.name, self.age)


# Driver Code
obj = Child("MLP", 6)
obj.display()

  • 通过使用 super():在 Python 中,可以通过使用内置函数 super() 来访问子类中的父类成员。super() 函数返回一个特殊的对象,用于访问父类的方法、属性或构造函数。
class Parent(object):
    # Constructor
    def \_\_init\_\_(self, name):
        self.name = name


class Child(Parent):
    # Constructor
    def \_\_init\_\_(self, name, age):


### 最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~  

给大家准备的学习资料包括但不限于:  

Python 环境、pycharm编辑器/永久激活/翻译插件  

python 零基础视频教程  

Python 界面开发实战教程  

Python 爬虫实战教程  

Python 数据分析实战教程  

python 游戏开发实战教程  

Python 电子书100本  

Python 学习路线规划

![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值