Python插件机制
python插件机制
python 可用于制作脚本化的环境,插件机制,面向接口的编程,为程的扩展提供了方便。
type方法,元类方法
class type(object) class type(name, bases, dict)
- type用来查询类的名称。<class ‘int’>.
- type方法用来进行类的实例化创建,类似于JAVA中的反射。
- 如果从type类来继承,则需要重写
__new__
方法
类创建实例的顺序:
1. type.__new__(...)
2. type.__init__(...)
python 2.x中的__metaclass__
属性,声明元类
__metaclass__能有什么用处,先来个感性的认识: 1. 你可以自由的、动态的修改/增加/删除 类的或者实例中的方法或者属性 2. 批量的对某些方法使用decorator,而不需要每次都在方法的上面加入@decorator_func 3. 当引入第三方库的时候,如果该库某些类需要patch的时候可以用metaclass 4. 可以用于序列化(参见yaml这个库的实现,我没怎么仔细看) 5. 提供接口注册,接口格式检查等 6. 自动委托(auto delegate) 7. ...
你可以在实现一个类的时候为其添加__metaclass__
属性:
# python 2.x class Foo(object): __metaclass__ = something ... # python3.x版本 class Meta(type): pass class MyClass(metaclass=Meta): pass
如果你这么做了, python就会用元类来创建类Foo. 当在内存中创建类对象Foo时, python会在类的定义中寻找__metaclass__
属性, 如果找到了, python就用它来创建Foo, 如果没有找到, 就会用内建的type元类来创建这个类.
当你实现一个有继承的类时:
class Foo(Bar): pass
python会做如下操作:
Foo中有__metaclass__
这个属性吗? 如果有, python会在内存中通过__metaclass__
创建一个名字为Foo的类对象. 如果python没有找到__metaclass__
, 它会继续在Bar(父类)中寻找__metaclass__
, 以此类推. 如果python在任何父类中都没有找到__metaclass__
, 它就会在模块层次中寻找__metaclass__
. 如果还是找不到__metaclass__
, python就会用内置的type元类来创建这个类对象.
由于在我们自定义的元类里面可以定制那些__metaclass__
指过来的类, 因此元类的主要目的一般是为了当创建类时自动的改变类, 或者说定制类.
python注解
Python3.0之后加入新特性Decorators,以@为标记修饰function和class。有点类似c++的宏和java的注解。Decorators用以修饰约束function和class,分为带参数和不带参数,影响原有输出,例如类静态函数我们要表达的时候需要函数前面加上修饰@staticmethod或@classmethod,具体内容可以查看:官方解释
参考: