Python面试必备:10个常见问题解析

0 下载量 194 浏览量 更新于2024-09-01 收藏 62KB PDF 举报
"这篇文章除了介绍Python面试中常见的问题外,还涉及了类继承、方法对象和`__new__`与`__init__`的区别等核心概念。" 在Python编程面试中,掌握基本的语法特性、面向对象编程以及语言的高级特性是至关重要的。以下是对文章中提到的几个关键知识点的详细解释: 1. **类继承**: 在Python中,类继承允许创建一个新类(子类)作为现有类(父类)的扩展。在例子中,`class B(A)`表示B类继承自A类。当B类的实例`obj`调用`show`方法时,它将执行B类定义的版本。若要调用A类的`show`方法,可以利用`__class__`属性,将其临时指向A类,然后调用`show`,但注意操作后需要恢复原状。 2. **方法对象**: 方法是绑定到类实例上的函数。在Python中,可以将对象视为可调用的,如果希望一个类的实例可以直接像函数一样调用,需要实现`__call__`方法。在给出的问题中,`a1(80)`想要正常工作,我们需要在类A中添加`__call__`方法,使其能够处理传入的参数并进行相应操作。 ```python class A(object): def __init__(self, a, b): self.__a = a self.__b = b def myprint(self): print('a=', self.__a, 'b=', self.__b) def __call__(self, num): print('call:', num + self.__a) ``` 3. **`__new__`与`__init__`**: `__new__`是类的构造器,负责创建新的对象实例,而`__init__`则负责初始化新创建的对象。在`__new__`中,`super(A, cls).__new__(cls)`会调用父类A的`__new__`方法来创建实例。在给出的代码中,如果`a > 10`,将会创建B类的实例,否则创建A类的实例。`__init__`方法通常用于设置对象的初始状态或执行必要的设置。 ```python class B(object): def fn(self): print('Bfn') def __init__(self): print("BINIT") class A(object): def fn(self): print('Afn') def __new__(cls, a): print("NEW", a) if a > 10: return super(A, cls).__new__(cls) return B("some_value") # 需要传递一个参数给B类的__init__ def __init__(self): print("AINIT") ``` 这些知识点是Python面试中常见的主题,熟练掌握它们对于应聘者来说非常重要。理解类继承的概念可以帮助你构建复杂的类层次结构,方法对象的运用可以增强代码的灵活性,而正确使用`__new__`和`__init__`则有助于控制对象的创建过程。在面试时,除了知道这些理论知识,还需要能够灵活应用它们去解决问题。