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

news2024/11/24 4:05:08

系列文章目录

个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊


文章目录

  • 系列文章目录
  • Python 面试的高阶问题
    • 39. 简述面向对象的三大特性?
    • 40. 如何在 Python 中创建类?
    • 41. 有什么方法可以获取类的所有属性和方法?
    • 42. 继承在 Python 中是如何工作的?
    • 43. 如何访问子类中的父类成员
    • 44. 访问说明符是否在 Python 中使用?
    • 45. 是否可以在不创建实例的情况下调用父类?
    • 46. 如何在 Python 中创建空类?
    • 47. `new` 修饰符和 `override` 修饰符的区别。
    • 48. 为什么使用 `Finalize`?
    • 49. 什么是 Python 中的 `__init__` 方法?
    • 50. 如何检查一个类是否是另一个类的子类?
  • Python Pandas 面试问题:[待更新](https://blog.csdn.net/a2360051431)

本文是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):
            ''' 
            In Python 3.x, we can also use super().__init__(name)
            '''
            super(Child, self).__init__(name)
            self.age = age
    
        def display(self):
            # Note that Parent.name cant be used 
            # here since super() is used in the constructor
            print(self.name, self.age)
    
    
    # Driver Code
    obj = Child("MLP", 6)
    obj.display()
    

44. 访问说明符是否在 Python 中使用?

Python 中是使用访问说明符的。访问说明符用于控制类的属性和方法的可见性和访问级别。

在 Python 中,有三种常见的访问说明符:公有(Public)、私有(Private)和受保护(Protected)。

  • 公有访问说明符(Public Access Specifier):在 Python 中,默认情况下,所有的属性和方法都被视为公有的,可以在类内部和外部进行访问和使用。

  • 私有访问说明符(Private Access Specifier):在 Python 中,私有属性和方法以双下划线 “__” 开头,例如 “__attribute” 或 “__method”。私有属性和方法只能在类内部被访问和使用,无法在类外部直接调用。但是,可以通过特殊的命名规则来间接访问私有成员。

  • 受保护访问说明符(Protected Access Specifier):在Python中,受保护属性和方法以单下划线"_"开头,例如 “_attribute” 或 “_method”。受保护属性和方法可以在类及其子类中使用,但不应该在类外部直接访问。

需要注意的是,Python 的访问说明符并不像其他编程语言那样严格强制执行访问级别,而是依赖于程序员的自律。因此,在编写 Python 代码时,应该遵循命名约定,以便正确使用访问说明符。

45. 是否可以在不创建实例的情况下调用父类?

在不创建实例的情况下,是可以调用父类的。Python 提供了一种通过类名直接调用父类方法的方式。

使用 super() 函数可以在子类中调用父类的方法。这样可以在子类中扩展或修改父类的行为,同时保持继承关系。

以下是一个示例代码,演示了如何在不创建实例的情况下调用父类:

class ParentClass:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print("Hello, I'm", self.name)


class ChildClass(ParentClass):
    def greet(self):
        super().greet()  # 调用父类的greet方法
        print("Nice to meet you!")


ChildClass.greet(ChildClass("Alice"))

输出结果为:

Hello, I'm Alice
Nice to meet you!

在上述示例中,我们定义了一个父类 ParentClass 和一个子类 ChildClass。子类 ChildClass 中的 greet() 方法使用 super() 函数调用父类的 greet() 方法,并在其后添加了额外的打印语句。

最后,我们通过在子类名后面加上括号并传入必要的参数,以类方法的方式调用子类的 greet() 方法,实现了在不创建实例的情况下调用父类的效果。

46. 如何在 Python 中创建空类?

在 Python 中创建空类非常简单:只需使用关键字 class 后跟一个类名即可,不需要为类定义任何属性或方法,可以直接使用 pass 语句来表示类体为空。

以下是创建空类的示例代码:

class EmptyClass:
    pass

在上述代码中,我们定义了一个名为 EmptyClass 的空类,其中的类体部分使用了 pass 语句表示为空。

通过这样的方式,就可以创建一个没有任何属性或方法的空类。可以根据需要后续添加属性和方法到该类中。

47. new 修饰符和 override 修饰符的区别。

在面向对象编程中,“new” 修饰符和 “override” 修饰符有不同的作用和含义。

  • "new"修饰符:

    • “new” 修饰符用于在派生类中隐藏基类中的成员。当在派生类中使用 “new” 修饰符来声明一个与基类中同名的成员时,该成员将隐藏基类中的同名成员。这意味着在通过派生类的实例访问该成员时,实际上访问的是派生类中的成员而不是基类中的成员。
    • 使用 “new” 修饰符并不会覆盖或修改基类中的成员,只是在派生类中添加了一个具有相同名称的新成员。因此,当通过基类引用调用被隐藏的成员时,仍然会访问到基类中的成员。
  • “override” 修饰符:

    • “override” 修饰符用于在派生类中重写(覆盖)基类中的虚拟方法或抽象方法。通过在派生类中使用 “override” 修饰符声明一个与基类中同名、参数和返回类型相同的方法,可以重写基类中的方法实现。
    • 当通过派生类的实例调用重写的方法时,实际上会执行派生类中的方法实现,而不是基类中的方法实现。
    • 注意,使用 “override” 修饰符要求基类中的方法必须是虚拟方法(使用 “virtual” 关键字)或抽象方法(使用 “abstract” 关键字)。否则,编译器会报错。

48. 为什么使用 Finalize

在 Python 中,finalize() 是一个特殊方法,用于对象在被垃圾回收之前的清理工作。当一个对象不再被引用时,即没有变量指向它时,Python 的垃圾回收机制会自动回收该对象,并在回收之前调用该对象的 finalize() 方法(如果定义了的话)。

使用 finalize() 方法可以在对象被销毁之前执行一些必要的清理操作,例如关闭打开的文件、释放占用的资源、解除对象与其他对象之间的关联等。这样可以确保在对象生命周期结束时进行必要的清理工作,避免资源泄漏或不良影响。

需要注意的是,finalize() 方法并不是 Python 中常用的资源管理方式。更好的做法是使用上下文管理器(Context Manager)来管理资源,通过 with 语句来确保资源的正确释放,而不依赖于垃圾回收机制去调用 finalize() 方法。这种方式更具可读性和可靠性。

值得注意的是,从 Python 3.4 开始,finalize() 方法已经不推荐使用。取而代之的是使用上下文管理器、try…finally 语句或其他资源管理模式来进行资源清理,以提高代码的可读性和可维护性。

49. 什么是 Python 中的 __init__ 方法?

在 Python 中,__init__() 方法是一个特殊的方法,用于在创建类的实例时进行初始化操作。它是类的构造函数,会在对象创建后自动调用。

当使用类名加括号 () 创建一个类的实例时,__init__() 方法会被自动调用,并负责初始化该实例的属性和其他必要设置。

以下是一个示例代码,展示了如何定义和使用 __init__() 方法:

class MyClass:
    def __init__(self, name):
        self.name = name

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


obj = MyClass("Alice")
obj.greet()

在上述代码中,我们定义了一个名为 MyClass 的类,其中的 __init__() 方法接受一个参数 name,并将其赋值给 self.name。在创建 MyClass 的实例时,传入一个名为 “Alice” 的参数,这样就调用了 __init__() 方法来初始化实例的 name 属性。

在实例化之后,我们通过 obj.greet() 调用了类中的 greet() 方法,并输出了相应的结果。

50. 如何检查一个类是否是另一个类的子类?

在 Python 中,可以使用 issubclass() 函数来检查一个类是否是另一个类的子类

issubclass(subclass, superclass) 函数接受两个参数,即待检查的子类和超类。如果子类是超类的直接或间接子类,则返回 True;否则返回 False

以下是一个示例代码,展示了如何使用 issubclass() 函数来检查类之间的继承关系:

class Parent(object):
   pass   
 
class Child(Parent):
   pass   
 
print(issubclass(Child, Parent))    # 输出 True
print(issubclass(Parent, Child))    # 输出 False

需要注意的是,issubclass() 函数只能用于判断类与类之间的继承关系,无法用于检查对象与类之间的关系。如果需要检查对象是否属于某个类的实例,可以使用 isinstance() 函数。

obj1 = Child()
obj2 = Parent()
print(isinstance(obj2, Child))    # 输出 False 
print(isinstance(obj2, Parent))   # 输出 True 

Python Pandas 面试问题:待更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三个视频怎么合成一个视频?分享简单好用的合并方法

通过将多个视频合并成一个,可以将分散的内容整合在一起,形成一个连贯的故事或主题。这对于制作影片、剧集、纪录片或视频日志等需要综合多个片段的项目非常有用,可以产生更连贯和流畅的观看体验。那么怎么将视频进行合并呢?给大家…

维度建模中的缓慢变化维

整理不易,转发请注明出处,请勿直接剽窃! 点赞、关注、不迷路! 摘要: 类型1.在当前数据行更新当前值,只有最新状态; 类型2.拉链表,保留历史又有最新状态; 类型3.新增列&am…

腾讯云CVM云服务器实例族是什么?区别选择攻略

腾讯云服务器CVM有多种实例族,如标准型S6、标准型S5、SA3实例、高IO型、内存、计算型及GPU型实例等,如何选择云服务器CVM实例规格呢?腾讯云服务器网建议根据实际使用场景选择云服务器CVM规格,例如Web网站应用可以选择标准型S5或S6…

Pytorch实现warm up和consine decay

在深度学习领域,模型训练过程中的不稳定性是一个常见的问题。为了解决这个问题,在Resnet这篇论文也提及了Warm Up的方法,通过逐渐增加学习率,引导模型在训练初期更稳定地收敛。同时在warm up之后结合consine decay的方法让训练变得…

计讯物联网关型水利遥测终端机TY910确保闸站自动化监测长效运行

闸站是我国水利建设工程的重要组成部分,具备调度水源、防洪排涝、灌溉等能力,在农业、水路运输、养殖业等行业领域起着关键作用,进而解决区域水资源不均衡的问题,促进水资源多方面的利用。当前,我国闸站存在数量多、分…

SonarQube安装、汉化及使用

一、环境准备 SonarQube下载:https://www.sonarqube.org/downloads/Java 11 或以上版本安装 多环境共存,指定 SonarQube 的java运行版本(注意地址改为自己的java路径,最后面必须带java): 解压目录下 &#…

Atlas 200I DK A2视频保存

Atlas 200I DK A2开发者套件内置案例第一个目标检测,视频保存下来无法打开,修改为cv2保存可正常在本地展示。 原代码部分 def infer_video(video_path, model, labels_dict, cfg, output_pathoutput.mp4):"""视频推理"""…

YOLOv5解析 | 第四篇:common.py文件详解

前言 文件位置:**./models/commonpy** 该文件是实现YOLO算法中各个模块的地方,如果我们需要修改某一模块(例如C3),那么就需要修改这个文件中对应模块的的定义。这里我先围绕代码,带大家过一遍各个模块的定义,详细介绍我将在后续的教案中逐步展开。由于YOLOv5版本问题,同…

SpringBoot 如何处理 CORS 跨域?

Springboot跨域问题,是当前主流web开发人员都绕不开的难题。但我们首先要明确以下几点 跨域只存在于浏览器端,不存在于安卓/ios/Node.js/python/ java等其它环境跨域请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器…

SpringMVC 中的数据绑定如何使用 @InitBinder 注解

SpringMVC 是一款基于 Java 的 Web 开发框架,它提供了许多方便开发的功能,其中包括数据绑定。在 SpringMVC 中,数据绑定的工作是由 DataBinder 类完成的。DataBinder 可以将 HTTP 请求中的数据绑定到 Java 对象中,并且还可以将 Ja…

《安富莱嵌入式周报》第316期:垂直降落火箭模型,超低噪声测量,开源电流探头,吸尘器BLDC,绕过TrustZone,提高频率计精度,CMSIS V6.0文档

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1rz4y1H71w/ 《安富莱嵌入式周报》第316期:垂直降落…

实验室服务器 环境配置记录

前言 本篇文章为本人自己(Toniht)在实验室服务器上配置环境的一些记录,我也是个半吊子,很多步骤都不知其所以然,主打一个能用就行。主要目的是方便后续遇见问题及时定位,或者后续再次需要时不用上网到处查找。次要目的是希望能帮…

从0到1学习Yalmip工具箱(1)-入门学习

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译:YALMIP 1.Yalmip工具箱的下载与安装 1.1下载 Yalmip的作者是Johan Lfberg,是由Matlab平台编程实现的一个免费开源数学优化工具箱,在官网上就可以下载。官方下载…

8-1-1、kuberbetes学习-service、deployment、ReplicaSet、pod

Kubernetes资源对象Pod、ReplicaSet、Deployment、Service之间的关系_CodingSoldier的博客-CSDN博客 Pod、ReplicaSet、Deployment、Service之间的关系如下图: deployment根据pod的标签关联到pod,是为了管理pod的生命…

Unity 事件函数的执行顺序

脚本生命周期流程图 Awake:在所有 Start 函数之前,以及 prefab 实例化之后调用。(如果一个 GameObject 在启动期间处于非活动状态,则在激活之前不会调用它。)OnEnable(仅在对象处于活动状态时调用&#xff…

为你揭开ai绘画女生软件的神秘面纱

黄琳:嘿,我最近听说了一种叫做ai绘画的东西,你知道它是什么吗? 罗娜:听说这是一种通过人工智能技术来生成艺术作品的过程和方法。 黄琳:哦,那它生成的效果如何呢?有什么软件可以实…

2023IKCEST “一带一路” 国际大数据竞赛重磅启动!

2023IKCEST第五届“一带一路”国际大数据竞赛暨第九届百度&西安交大大数据竞赛,由联合国教科文组织国际工程科技知识中心(IKCEST)、中国工程科技知识中心(CKCEST)、百度及西安交通大学共同主办,旨在放眼…

LINUX安装nginx详细步骤,部署web前端项目

1. 安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2. 下载并解压安装包 可以去https://nginx.org/download里面找最新的包,nginx-1.25.1.tar.gz及以后的,里面资源比较多,耐心寻…

飞行动力学 - 第7节-起飞性能 之 基础点摘要

飞行动力学 - 第7节-起飞性能 之 基础点摘要 1. 气动特性2. 起飞性能3. 性能指标3.1 地面滑跑阶段3.2 起飞滑跑距离估算 4. 跑道4.1 编号4.2 等级 5. 参考资料 1. 气动特性 起飞不仅需要考虑升力,还需要在有限跑道长度上加速,因此襟翼放出的角度不能太大…

Claude 2正式上线;Prompt在手,天下我有

🦉 AI新闻 🚀 Claude 2正式上线,AI能力全面提升 摘要:Claude 2正式上线!作为ChatGPT的强力挑战者,Claude 2的到来绝对是一个重磅事件。Claude 2性能更强,响应更快,并正式推出了网页…