python metaclass的理解

本文深入探讨了Python中元类的概念,包括如何使用type函数创建类,以及通过自定义元类来修改类属性的方法。通过实例展示了如何利用元类将类属性名称转换为小写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python metaclass的理解
1.type,获得变量类型 type(object) -> the object’s type

>>> a = 2
>>> type(a)
<type 'int'>
>>> type(type(a))
<type 'type'>
>>>
>>> class MM(object):
...    def __init__(self):
...       self.a = a
... 
>>> mm = MM()
>>> type(mm)
<class '__main__.MM'>
>>> isinstance(mm,MM)
True
>>> 
>>>> type(MM)
<type 'type'>
>>> 
  1. type 生成类 type(name, bases, dict) -> a new type

>>> def func(self):
...    print "self.a is ",self.a
... 
>>> MyClass = type('MyClass',(object,),{'func':func,'a':100})
>>> myclass = MyClass()
>>> myclass.func()
self.a is  100
>>> 
  1. 元类,任何一个类建立的时候都需要元类来创建,元类可以用来改变类
    比如下面这个元类就是将类中的变量名改成小写

class UpdateMetaClass(type):
    def __new__(cls,name,bases,attrslist):
        attrs = ((name,value) for name,value in attrslist.items() if not name.startswith("__"))
        lower_attrs = dict((name.lower(),value) for name,value in attrs)
        #return type.__new__(cls,name,bases,lower_attrs)
        return super(UpdateMetaClass,cls).__new__(cls,name,bases,lower_attrs)

class MyClassTest(object):
    __metaclass__ = UpdateMetaClass
    AA = 1000

#AA has been changed to be aa
print MyClassTest.aa


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值