python学习手册笔记——39.元类
00.比99%的用户所担心的魔力要更深。如果你犹豫是否需要他们,那你不需要它们(真正需要元类的人,能够确定地直到需要它们,并且不需要说明为什么需要)。“因为某物很酷”而编写它,似乎不是一种合理的判断,除非你在做试验或者学习。
01.元类就是用来创建类的“东西”。你创建类就是为了创建类的实例对象。
02.
03.元类的主要目的就是为了当创建类时能够自动地改变类。
04.元类修改:
内省属性:__class__和__dict__这样的特殊属性允许我们查看Python对象的内部实现方面
运算符重载方法:__str__和__add__这样特殊命名的方法。
属性拦截方法:__getattr__、__setattr__和__getattribute__允许包装的类插入自动运行的代码,这些代码可以验证属性请求并且将它们委托给嵌入的对象
类特性:内置函数property允许我们把代码和特殊的类属性关联起来,当获取、复制或删除该属性的时候就自动运行代码。尽管不想前面一段所介绍的工具那样通用,特性考虑到了访问特定属性时候的自动代码调用。
类属性描述符:__get__、__set__和__delete__处理程序方法,当分配给该类的一个实例的属性被访问的时候自动运行它们
函数和类装饰器:装饰器的特殊的@可调用用法,运行我们添加当调用要给函数或创建一个类实例.装饰器语法插入名称重新绑定逻辑,在函数或类定义语句的末尾自动运行该逻辑——装饰的函数和类名重新绑定到拦截了随后调用的可调用对象。
05.元类
*提供一种更为正式和明确的结构
*有助于确保应用程序猿不会忘记根据一个API需求来扩展它们的类
*通过把类定制逻辑工作化到一个单独的位置中,避免代码冗余及其相关的维护成本
06.类是类型,类型也是类:
*类型由派生自type得类定义
*用户定义得类是类型类得实例
*用户定义得类是产生它们自己得实例得类型
07.元类是Type的字类
*type是产生用户定义的类的一个类
*元类是type类的一个字类
*类对象是type类的一个实例,或一个子类
*实例对象产生字一个类
08.一条class语句的末尾:
class = type(classname, superclasses, attributedict)
type.__new__(typeclass, classname, superclasses, attributedict)
type.__init__(class, classname, superclasses, attributedict)
09.好的程序也理解简单是最好的工程,并且高级工具也应该再在需要的时候使用。