Python面试热门:10道常问类继承与方法对象问题解析

1 下载量 27 浏览量 更新于2024-08-29 收藏 64KB PDF 举报
"这篇资源主要列举了Python程序员面试中常被问到的10个问题,涉及类继承、方法对象以及`__new__`和`__init__`的区别等核心概念。" 在Python编程中,类继承是面向对象设计的重要组成部分,它允许创建一个新的类(子类)来扩展或修改现有类(父类)的功能。在提供的代码示例中,`class B(A)`表明`B`是`A`的子类,继承了`A`的属性和方法。当调用`obj.show()`时,实际执行的是`B`类中定义的`show`方法。如果需要调用`A`类的`show`方法,可以通过设置`obj.__class__ = A`,然后调用`obj.show()`,但这会改变`obj`的类型,因此在调用后应将其恢复为原来的类型`B`。 方法对象是指类中的函数,它们在被实例化后可以作为对象的方法被调用。面试中提到的一个问题是,如何使对象实例能够像函数一样直接被调用。这需要在类中实现`__call__`方法。例如,`A`类的实例`a1`应该能直接接收参数并执行相关操作。为此,我们需要添加`__call__`方法,使得`a1(80)`这样的调用能够正确执行。代码示例如下: ```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) ``` 接下来,`__new__`和`__init__`是Python中两个与对象创建密切相关的特殊方法。`__new__`是首先被调用的,它负责生成新的对象实例,而`__init__`则用于初始化新创建的对象。在给出的代码片段中,`__new__`被重写以根据传入的参数`a`的值决定创建`A`类还是`B`类的实例。`__init__`则用于打印特定的信息。当`a > 10`时,`__new__`会返回`super(A, cls).__new__(cls)`,即创建`A`类的实例,否则创建`B`类的实例。 这个例子展示了如何在创建对象时动态地改变类的行为,这种能力在设计元类或者实现某些高级功能时尤其有用。理解这些基本概念对于Python程序员来说至关重要,因为它们是Python面向对象编程的核心部分,也是面试中常考的知识点。通过掌握这些内容,开发者能够更好地理解和构建复杂、灵活的Python应用程序。