Python内核阅读(十五): 类机制 (上)


起步

考虑如下的python代码:

class A(object):
    pass
a = A()

这其中包含了三个对象:object(class 对象), A(class 对象) 和 a(instance 对象). object 与 A之间存在父子关系(is-kind-of), 即A是object的子类. 而a和A之间的关系是实例的关系(is-instance-of). 从继承的关系上说, a也是object的实例.


Python内核阅读(十四): 函数闭包与修饰器


起步

一段代码的执行结果不光取决于代码中的符号, 更多地取决于代码中符号的语义, 运行时的语义由名字空间决定. 名字空间在运行时由Python虚拟机动态维护的, 但是有时候需要将名字空间静态化. 例如:

base = 1
def get_compare(base):
    def real_compare(value):
        return value > base
    return real_compare

compare_10 = get_compare(10)
print(compare_10(5))    # False
print(compare_10(20))   # True


Python内核阅读(十三): 函数对象和函数调用


起步

python中, 任何东西都是一个对象, 函数也不例外, 函数对象结构 PyFunctionObject :

[functionobject.h]
typedef struct {
    PyObject_HEAD
    PyObject *func_code;        // 编译后的 PyCodeObject 对象
    PyObject *func_globals;     // 运行时的global名字空间
    PyObject *func_defaults;    // 默认参数(tuple or null)
    PyObject *func_kwdefaults;  // 带声明的参数默认值 dict or null
    PyObject *func_closure;     // 闭包函数集合, null or tuple
    PyObject *func_doc;         // 函数的文档 PyStringObject
    PyObject *func_name;        // 函数名, __name__ 属性, 是PyStringObject对象
    PyObject *func_dict;        // 函数的 __dict__ 属性, PyDictObject 或 null
    PyObject *func_weakreflist; 
    PyObject *func_module;      // 函数的__module__ ,可以是任意对象
    PyObject *func_annotations; // 注释, null or dict
    PyObject *func_qualname;    /* The qualified name */
} PyFunctionObject;