元类 提供了对子类的构造方法进行深度定制的途径 深度定制体现在 是在获取了子类 名称;父类;全部属性 等信息的情况下对子类进行全方位控制 最终调用 手动类型构造器(元类) type(name, parents, attrs)进行最终的类对象输出 元类输出的对象为 类对象, 即具有实例化对象能力的类,但同时又是对象! 定义类时如果增加了 对metaclass的赋值, 则利用metaclass进行构造, 此处可理解为Python为对象构造提供的hook,用于执行上述定制化动作 class MyMeta(type): def __new__(cls, name, parent, attrs): print('meta name:%s parent' % name, end=':') print(parent) print(attrs) for k, v in attrs.items(): print(k, end='----') print(v) if isinstance(attrs[k], int): attrs[k] = attrs[k] * 2 attrs['__qualname__'] = 'hello' return type.__new__(cls, "Hello", parent, attrs) class TestMeta(object, metaclass=MyMeta): a = 7 t = TestMeta() print(type(t)) print(t.a)
##############################静态方法与类方法#################################
class MyTest(): def __init__(self): self.a = 9 def printd(self): print(self.a) @staticmethod def sprintd(): print("static!") @classmethod def cprintd(cls): print("class") print(type(cls)) mt = MyTest() mt.printd() MyTest.printd(mt) mt.sprintd() MyTest.sprintd() mt.cprintd() MyTest.cprintd()