python面向对象 面试题
时间: 2024-12-26 10:27:26 浏览: 2
### Python 面向对象编程面试题及答案
#### 类与实例的关系是什么?
类(Class)定义了一组具有相同属性和行为的对象(Object),而实例(Instance)则是根据这个类创建的具体对象。每个实例都有自己独立的状态,但是共享同一套操作方法。
```python
class Dog:
kind = 'canine' # class variable shared by all instances
def __init__(self, name):
self.name = name # instance variable unique to each instance
d = Dog('Fido')
e = Dog('Buddy')
print(d.kind) # 输出 "canine"
print(e.kind) # 输出 "canine"
print(d.name) # 输出 "Fido"
print(e.name) # 输出 "Buddy"
```
[^1]
#### 解释 `__init__` 方法的作用。
`__init__` 是初始化器(也称为构造函数),当新对象被创建时自动调用此方法来进行必要的设置工作。通过它可以在创建对象的同时给定初始状态或参数值。
```python
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
p = Person("John", "Doe")
print(p.first_name + " " + p.last_name) # 输出 "John Doe"
```
#### 如何实现继承机制?
子类可以通过指定父类名作为基类列表的一部分来继承父类特性。这允许子类重写或扩展来自父类的方法以及访问受保护成员变量。
```python
class Animal:
def speak(self):
pass
class Cat(Animal): # 继承自 Animal 类
def speak(self):
return "Meow!"
cat_instance = Cat()
print(cat_instance.speak()) # 输出 "Meow!"
```
[^2]
#### 描述什么是多态性及其应用场景。
多态意味着同一个接口可以有不同的表现形式;即不同类型的实体能够响应相同的请求却有着各自特定的行为方式。这种灵活性使得代码更加通用化并易于维护。
```python
from abc import ABCMeta, abstractmethod
class Shape(metaclass=ABCMeta):
@abstractmethod
def area(self):
"""Calculate the shape's area."""
...
class Rectangle(Shape):
def __init__(self, width, height):
super().__init__()
self.width = width
self.height = height
def area(self):
return self.width * self.height
shapes = [Rectangle(3, 4), ... ]
for s in shapes:
print(s.area())
```
#### 自省的概念指的是什么?
自省是指程序能够在运行期间动态获取有关自身的信息,比如查看某个对象属于哪个类型、拥有哪些属性等。Python 提供了许多内置工具帮助开发者完成这项功能,如 type() 函数用于查询对象的数据类型,dir() 则用来列举对象的所有可访问属性名称。
```python
obj = ["hello"]
print(type(obj)) # <class 'list'>
print(dir(obj))
# ['__add__', '__class__', ..., 'append', 'clear']
```
[^3]
阅读全文