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.可以有基于类的参数的,不带参数的

原文地址:https://www.cnblogs.com/drinkMilk/p/10713873.html