1 类其实就是由函数和其他变量名所构成的包,很像模块

2 定义一个类的超类是通过在class语句的圆括号中将其列出,类在圆括号中由左至右列出的顺序,会决定其在类树中由左至右的搜索的顺序

3 类通过继承进行定制

  1. 超类列在类开头的括号中
  2. 类从其超类中继承属性
  3. 实例会继承所有可读取类的属性
  4. 每个object.attribute都会开启新的独立搜索
  5. 逻辑的修改是通过创建子类,而不是修改超类

4 类是模块内的属性

5 OOP的概念

  1. 实例创建 – 填充实例属性
  2. 行为方法 – 在类方法中封装逻辑
  3. 运算符重载
  4. 定制行为 – 重新定义子类中的方法以使其特殊化
  5. 定制构造函数 – 为超类步骤添加初始化逻辑

6 Pickle:任意Python对象和字节串之间的序列化

7 Shelve 按照键值的方式把Python对象存储到一个文件中

8 调用超类构造函数

Python会找出并且只调用一个__init__,如果要保证子类的构造函数也会执行超类构造时的逻辑,一般都必须通过声明超类的__init__方法.
class Super:
	def __init__(self,x):
		....code....
class Sub(Super):
	def __init__(self,x,y):
		Super.__init__(self,x) 
		 .....code.....

9 要增强继承的方法而不是完全替代,就是在子类的新版方法中,手动回调超类版本的这个方法,也就是,把self实例手动实例传给超类的版本:SuperClass.method(self…)

10 运算重载符

当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们.

11 常见的运算符重载方法

方法

重载

调用

__init__

构造函数

对象建立 : X=Class(args)

__del__

析构函数

X对象回收

__add__

运算符+

如果没有_iadd_,x+y,x+=y

__or__

运算符

(位OR)

__repr__,__str__

打印,转换

print(X),repr(X),str(X)

__call__

函数调用

X(*args,**kargs)

__getattr__

点号运算

X.undefined

__setattr__

属性赋值语句

X.any = value

__delattr__

属性删除

del X.any

__getattribute__

属性获取

X.any

__getitem__

索引运算

X[i:j]

__setitem__

索引赋值语句

X[key]=value

__delitem__

索引和分片删除

del X[i:j]

__len__

长度

len(x)

__bool__

布尔测试

bool(x)

__lt__,__gt__

特定的比较

x<y,x>y

__le__,__ge__

__eq__,__ne__

__radd__

右侧加法

Other+X

__iadd__

实地(增强的)加法

X+=Y(or else __add__)

__iter__, __next__

迭代环境

I=iter(X),next(I)

__contains__

成员关系测试

item in X

__index__

整数值

hen(X),bin(X)

__enter__,__exit__

环境管理器

with obj as var:

__get__,__set__

描述符属性

X.attr,X.attr=value,del X.attr

__delete__

__new__

创建

在__init__之前创建对象

12 委托:"包装"对象

通常就是指控制器对象内嵌其他对象,而把运算请求传给那些对象

13 方法是对象:绑定或无绑定

1 无绑定类方法对象:无self
	通过类进行点运算从而获取类的函数属性,会传回无绑定方法对象.调用该方法时,必须明确提供实例对象作为第一个参数.
2.绑定实例方法对象:self+函数对
	通过对实例惊醒全运算从而获取类的函数属性,会传回绑定对象
例如:
	class Spam:def doit(self,message):print(message)
	绑定实例方法对象:obj =Spam()  x=obj.doit  x('hello world')
	无绑定类方法对象:obj =Spam()  t=Spam.doit  t(obj,'hhhh')

14 伪私有属性

就是名称以两个下划线开始:__X,用来把名称本地化到包含类中.这包括像定义在类中的方法这样的类属性,以及在类中赋值的self实例属性.这样的名称扩展来包括类名称,类名称使得它们独特

15 装饰器

16 元类

17 修改类属性的副作用

由于类属性由所有实例共享,一处的修改,会影响到所有的实例.

18 多重继承:顺序很重要—>Python总是根据超类在首行的顺序,由左至右搜索超类