python漫游2
Python中type、metaclass、class、object
1.python中class也是对象,它的类就是metaclass
2.使用type创建类的方式:MyClass = type('MyClass', (), {}),第一个参数为类名,第二个参数为父类名,第三个参数为成员变量(以键值对的方式给出)
3.
class UpperAttrMetaclass(type): def __new__(cls, clsname, bases, dct): uppercase_attr = {} for name, val in dct.items(): if not name.startswith('__'): uppercase_attr[name.upper()] = val else: uppercase_attr[name] = val return super(UpperAttrMetaclass, cls).__new__(cls, clsname, bases, uppercase_attr) class Foo(object, metaclass=Thing, kwarg1=value1): ... class Thing(type): def __new__(class, clsname, bases, dct, kwargs1=default): ...
4.在python中要访问某一对象(包括变量、模块、方法)都会去namespace中根据对象名去搜索搜索顺序为LEGB(local>enclose function>globals>_buildins_)
5.python编译器启动的时候会创建一个全局字典(global namespace):sys.modules。在进行import A操作时,先在sys.modules搜索是否有A,如果没有则导入(加入global namespace),如果有则使用sys.modules中的模块。
python中的装饰器
在不改变原函数的基础上,对原函数的功能做出修改。
1.可以有基于方法的带参的、不带参的
2.可以有基于类的参数的,不带参数的