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

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

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!
• 1
• 2

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

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


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


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

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

class EmptyClass:
    pass
• 1
• 2

在上述代码中,我们定义了一个名为 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 Numpy 面试问题:华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(四)

相关文章
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
63 3
|
2月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
2月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
2月前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
4月前
|
存储 数据可视化 算法
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
|
4月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
4月前
|
数据采集 算法 网络协议
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
|
4月前
|
数据采集 XML 程序员
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
|
4月前
|
Python
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
|
4月前
|
SQL 分布式计算 前端开发
10个常见的python面试问题_python面试常见问题
10个常见的python面试问题_python面试常见问题