复习下面概念:
  • 抽象数据类型:在编程中使用一种对象时,只需考虑应该如何使用,不需要去关注和触及对象的内部表示。这样的数据对象就是一种抽象数据单元,一组这样的对象构成一个抽象的数据类型,为程序的使用提供一套功能。
  • 接口:提供模块使用是所需的所有信息。
  • 不变类型:如果某个类型只提供了构造操作、解析操作,未提供变动操作,那么该类型的对象在创建后就不会变化,永远处于固定的状态。
  • 可变类型:如果摸个类型提供了变动操作,对该类型的对象执行这种操作后,虽然对象依旧,但其内部状态已经改变。
  • self参数:表示当前类。
  • 初始化方法:用__init__方法表示,在构造本类新对象时,自动调用该方法,一般用作
    初始化对象属性。
  • 静态方法:①函数定义的头部行之前加修饰符@staticmethod,②参数列表中没有self参数,③可以使用类名.方法对象.方法调用。本质上,静态方法就是定义在类中的普通函数。
  • 类方法:①函数定义的头部行之前加修饰符@classmethod,②必须有其调用类的参数,习惯用cls作为参数,可添加多个参数。
  • 实例变量:实例对象中的数据属性。
  • 私有变量:只允许在类的内部访问,不允许在类定义之外使用。习惯将一个下划线开头的名字作为私有变量。
  • Python的特殊方法名:以两个下划线开始,以两个下划线结束,Python中为所有运算符定义了特殊方法名。
  • 函数super():用在派生类(子类)的方法定义中,从该类的直接基类做属性检索。采用super函数而不直接写具体基类的名字,使得查找的过程更加灵活。
请列举出数据类型的三大操作,说明它们的意义和作用
  • 构造操作:基于已知信息,产生该类型的新对象
  • 解析操作:从一个对象取得有用信息,其结果反映了被操作对象的某方面特性,但结果并不是本类型对象。
  • 变动操作:修改被操作对象的内部状态。
为什么需要初始化函数?其重要意义和作用什么?
  • 在创建对象时,自动初始化对象属性,无需设置对象属性,方便对象快速创建。
设法说明在实际中某些类型应该定义为不变类型,另一些类型应该定义为可变类型。请各举出两个例子。
  • 不变类型:python中的str、tuple类型,设定后无法更改
  • 可变类型:python中的list、set类型,可以根据需要改变
请简要说明在定义一个数据类型时应该考虑哪些问题?
  • 涉及的数据类型操作、确定类型名、数据的类型的功能及对应的描述方式。
请解释并比较类定义中的三类方法:实例方法、静态方法、类方法。
  • 实例方法:操作对象(实例)中数据的方法
def func(self):
    # 实例方法,操作的数据, 是实例中的数据
  • 静态方法:①函数定义的头部行之前加修饰符@staticmethod,②参数列表中没有self参数,③可以使用类名.方法对象.方法调用。本质上,静态方法就是定义在类中的普通函数。
@staticmethod
def func(self):
    # 普通函数
  • 类方法:①函数定义的头部行之前加修饰符@classmethod,②必须有其调用类的参数,习惯用cls作为参数,可添加多个参数。
@classmethod
def func(cls):
    # 用类方法实现与本类所有对象有关的操作
列出Python编程中有关类属性命名的约定
  • 类:首字母大写,如:AaaBbb
  • 属性:全小写加_ (或者第一个单词小写,后面单词首字母大写),如aaa_bbb_ccc,aaaBbbCcc
补充

类专有方法(Python中通过约定一些专有的方法来增强类的功能)

__init__:构造函数,在生成对象时调用(实例变量也在此函数中定义);

__del__:析构函数,释放对象时使用;

__repr__:打印(若有__str__,则先尝试str),转换;

__setitem__:按照索引赋值;

__getitem__:按照索引取值;

__len__:获取长度,内置函数len()使用;

__call__:函数调用(对象看作一个算子);

repr与str:repr()与str()为内置函数,对应类中的__repr__与__str__来处理字符串:
repr对Python(程序员)友好,生成的字符串应可通过eval()重构对象;
str为用户友好,方便用户理解的输出;
print时先查看__str__,若未定义,再查看__repr__;

运算符未列出:__add__:加运算........