Python 元类

元类 提供了对子类的构造方法进行深度定制的途径
深度定制体现在 是在获取了子类  名称;父类;全部属性  等信息的情况下对子类进行全方位控制
最终调用 手动类型构造器(元类) 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值