面试复习-Python-面向对象
面向对象编程的特点
封装是将数据和操作数据的方法封装在一个类中,对外隐藏内部的实现细节,只提供一些公共的方法来访问和修改数据。这样可以提高代码的安全性和可维护性,避免外部直接访问和修改内部数据,导致程序出现错误。
继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。子类可以继承父类的所有公共属性和方法,并可以根据需要添加自己的属性和方法,或者重写父类的方法
多态是指同一个方法可以根据调用对象的不同而表现出不同的行为。在 Python 中,多态是通过方法重写和方法重载来实现的。方法重写是指子类重写父类的方法,方法重载是指在同一个类中定义多个同名方法,但参数列表不同。
抽象类是一种不能被实例化的类,它只能作为其他类的父类,用于定义一些抽象方法,这些方法没有具体的实现,需要在子类中实现
1
2
3
4
5
6
7
8
9
10from abc import ABC, abstractmethod
class Shape(ABC):
def area(self):
pass
def perimeter(self):
pass
Python类的基础知识
类的定义
1 | class Student(object): |
子类的定义:
1 | class BoyStudent(Student): |
类的特殊属性
1 | BoyStudent.__doc__ |
静态方法
在 Python 中,静态方法是一种不依赖于类实例和类本身的方法。它可以通过类名直接调用,而不需要创建类的实例。使用 @staticmethod 装饰器来定义静态方法。例如:
1 | class MyClass: |
类方法
使用 @classmethod 装饰器定义,并且第一个参数通常命名为 cls,代表类本身。
类方法:
可以访问类变量,通过 cls 参数可以访问和修改类的属性。不能直接访问实例变量,因为没有实例对象的引用。
静态方法:
不能访问类变量和实例变量,它完全独立于类和实例的状态。通常用于与类或实例没有直接关系的通用功能。
1 | class MyClass: |
其他要点
- 组合类似于js中类的聚合,新类直接将旧类的实例包含在自己的属性中,从而达到访问旧类中属性和方法的目的
- Python的多重继承在查找属性和方法是广度优先搜索的
类相关的内建函数
1 | issubclass(BoyStudent, Student) |
类的特殊属性和方法
slots
- 当定义了 slots 时,Python 不会为每个实例创建一个 dict 属性字典来存储实例的属性。这可以显著减少内存使用,特别是在创建大量实例的情况下。
- slots 可以明确地指定一个实例可以拥有的属性列表
1 | class BoyStudent(Student): |
描述符方法 get set delete
在 Python 中,描述符是一种实现了特定协议(__get__
、__set__
和__delete__
方法)的对象,用于控制对另一个对象属性的访问。主要用于自定义
实例属性访问时的一些操作。
1 | class IntegerValidator: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 三木的技术博客!
评论