Python类与对象最全总结大全(类、实例、属性方法、继承、派生、多态、内建函数)

2021年9月29日 10点热度 0条评论

目录

面向对象编程

常用术语/名词解释

抽象/实现

封装/接口

合成

派生/继承/继承结构

泛化/特化

多态

自省/反射

访问限制

私有属性和公有属性

私有方法的设置

创建类

声明与定义

类属性

类的数据属性

类的方法属性(函数属性)

查看类的属性

特殊的类属性

实例

初始化:通过调用类对象来创建实例

__init__()“构造器”方法

__new__()“构造器”方法

__del__()“解构器”方法

实例属性

在构造器中首先设置实例属性

默认参数提供默认的实例安装

__init__()应当返回None

实例的属性可在创建实例后自行增减

查看实例属性

特殊的实例属性

内建类型属性

实例属性VS类属性

访问类属性

从实例中访问类属性须谨慎

类属性持久性

绑定和方法调用

调用绑定方法

调用非绑定方法

静态方法和类方法

staticmethod()和classmethod()内建函数

使用函数修饰符

组合

子类和派生

继承

__bases__类属性

通过继承覆盖方法

从标准类型派生

多重继承

多态

类、实例和其他对象的内建函数

issubclass()

isinstance()

hasattr()、getattr()、setattr()、delattr()

dir()

super()

vars()

面向对象编程

常用术语/名词解释

抽象/实现

抽象指对现实世界问题和实体的本质表现、行为和特征建模,建立一个相关的子集,可以用于描绘程序结构,从而实现这种模型。抽象不仅包括这种模型的数据属性,还定义了这些数据的接口。对某种抽象的实现就是对此数据及与之相关接口的现实化( realization)。现实化这个过程对于客户程序应当是透明而且无关的。

封装/接口

封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数。通过任何客户端直接对数据的访问,无视接口与封装性都是背道而驰的,除非程序员允许这些操作。作为实现的一部分,客户端根本就不需要知道在封装之后,数据属性是如何组织的。在 Python中,所有的类属性都是公开的,但名字可能被“混淆”了,以阻止未经授权的访问,但仅此而已,再没有其他预防措施了。这就需要在设计时,对数据提供相应的接口,以免客户程序通过不规范的操作来存取封装的数据属性。

合成

合成扩充了对类的描述,使得多个不同的类合成为一个大的类,来解决现实问题。合成描述了一个异常复杂的系统,比如一个类由其他类组成,更小的组件也可能是其他的类,数据属性及行为,所有这些合在一起,彼此是“有一个”的关系。比如, RepairShop“有一个”技工(应该至少有一个吧),还“有个”顾客(至少一个)。

派生/继承/继承结构

派生描述了子类的创建,新类保留已存类类型中所有需要的数据和行为,但允许修改或者其他的自定义操作,都不会修改原类的定义。

继承描述了子类属性从祖先类继承这样一种方式。从前面的例子中,技工可能比顾客多个汽车技能属性,但单独的来看,每个都“是一个”人。继承结构表示多“代”派生,可以描述成一个“族谱”,连续的子类,与祖先类都有关系。

泛化/特化

泛化表示所有子类与其父类及祖先类有一样的特点,所以子类可以认为同祖先类是“是一个”(is-a)的关系,因为一个派生对象(实例)是祖先类的一个“例子”。比如,技工“是一个”人,车“是一个”交通工具等。

特化描述所有子类的自定义,也就是,什么属性让它与其祖先类不同。

多态

多态的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类多态表明了动态(后来又称运行时)绑定的存在,允计重载及运行时类型确定和验证。

自省/反射

自省表示给予程序员某种能力来进行像“手工类型检查”的工作,它也被称为反射。这个性质展示了某对象是如何在运行期取得自身信息的。传一个对象给我们,我们可以查出它有什么能力。比如内建函数dir()和type(),以及类的特殊属性__dict__,__name__及__doc__都能实现自省的效果。

访问限制

私有属性和公有属性

在player类内定义了name和age属性,然后创建类的实例wxj,通过实例访问类的name和age属性并对其做出修改,最后通过实例调用类方法printInfo()打印出球员的姓名和年龄。此时,name和age属性是公有属性,可以从外部进行访问和修改。

假设想限制外部代码对类内部属性的修改,则可以将属性设为私有变量。方法是在属性名称前加双下划线。

标签: 暂无
最后更新:2021年9月29日