第 4 章 面向对象的 Python 面向对象的 Python
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
Python 是一种面向对象 (OO) 编程语言。但与其他一些面向对象语言不同的是,Python 并不强迫您只使用面向对象范式:它还支持 过程式编程,支持模块和函数,因此您可以为程序的每一部分选择最佳范式。 面向对象范式可帮助您将状态(数据)和行为(代码)组合成方便的功能包。此外,它还提供了本章所涉及的一些有用的专门机制,如继承和特殊方法。当你不需要面向对象编程的优点时,基于模块和函数的更简单的过程式方法可能更适合你。1面向对象编程的优点。使用 Python,您可以混合和匹配各种范式。
除了核心 OO 概念外,本章还包括抽象基类、装饰 器和元类。
类和实例
如果 您熟悉其他 OO 语言(如 C++ 或 Java)中的面向对象编程,您可能已经很好地掌握了类和实例:类是一种用户定义的类型,您将其实例化以构建实例,即该类型的对象。Python 通过类和实例对象支持这一点。
Python 类
类是具有以下特征的 Python 对象:
-
调用类对象就像调用函数一样。这种调用在 中称为实例化,返回的对象称为类的实例;类也称为 实例的类型。
-
类具有任意命名的属性,可以绑定和引用。
-
类属性的值可以是 描述符(包括函数)(见"描述符 "部分),也可以是普通数据对象。
-
与函数绑定的类属性也称为类的 方法。
-
一个方法可以有许多 Python 定义的名称中的任何一个,这些名称带有 两个前导下划线和两个后导下划线(称为 dunder 名称,是 "双下划线名称 "的缩写--例如,名称__init__ 读作 "dunder init")。当对类或其实例进行各种操作时,如果类提供了这些特殊方法,Python 就会隐式地调用它们。
-
类可以从一个或多个类继承,这意味着它委托其他类对象查询类本身没有的某些属性(包括常规和 dunder 方法)。
一个类的 实例是一个 Python 对象,它具有可以绑定和引用的任意命名的属性。每个实例对象都委托其类对实例本身没有的属性进行查找。反过来,类可以将查询委托给它继承的类,如果有的话。
在 Python 中,类是对象(值),处理起来就像其他对象一样。您可以在函数调用中将类作为参数传递,函数也可以将类作为调用结果返回。你可以将类绑定到变量、容器中的项目或对象的属性上。类也可以是字典的键。由于类在 Python 中是再普通不过的对象,所以我们常说类是头等对象。
班级声明
class语句是创建类对象最常用的方法。class是一个单句复合语句,语法如下:
classClassname(base-classes,*,**kw):statement(s)
类名是一个标识符:当类语句结束时,它是一个与刚刚创建的类对象绑定(或重新绑定)的变量。Python 命名规则建议类名使用标题大小写,如Item、PrivilegedUser、MultiUseFacility 等。
base-classes 是一系列以逗号分隔的表达式,其值是类对象。不同的编程语言对这些类对象使用不同的名称:你可以称它们为类的基类、超类或父类。你可以说创建的类继承自、派生自、扩展 或子类化了它的基类;在本书中,我们一般使用extend。该类是其基类的 直接子类或 后代。**kw可以 包括一个命名参数metaclass=来确定类的元类、2中介绍的。
语法上,包含
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access