关于type()元类的一些笔记

2018-05-22  本文已影响0人  bboyAyao

type函数:可以生成一个类

type ( 类名, 由父类名称组成的元组(针对继承的情况,可以为空),包含属性的字典(名称和值)) 添加的属性是类属性,并不是实例属性。

class A:
    pass
class B:
    pass
class A(B): 
    num = 1

#上面创建类等价于下面type()创建的形式                                              
A = type('A',(B,),{'num':1})  #第二个参数加逗号才表示元组     
print(A)
print(A.num)
print(A.__mro__)  #查看继承哪些父类

#-----------运行结果----------------
<class '__main__.A'>
1
(<class '__main__.A'>, <class '__main__.B'>, <class 'object'>)

元类:

元类就是类的类,元类的主要目的就是为了当创建类时能够自动地改变类。

元类的一些作用:

1.拦截类的创建
2.修改类
3.返回修改之后的类

例子:

决定在你的模块里所有的类的属性都应该是大写形式。有好几种方法可以办到,但其中一种就是通过在模块级别设定metaclass方法

def aa(future_class_name,future_class_parent,futurn_class_attr):
    newArr ={}
    for n,v in futurn_class_attr.items():
        if not n.startswith("__"):
            newArr[n.upper()] = v
    return type(future_class_name,future_class_parent,newArr)

#以下python3写法 python2写法为 在类里面添加属性 __metaclass__ = aa
class A(metaclass = aa):
    num = 1
    name = "Ydd"
    __year = 2018

print(hasattr(A,"num"))  #hasattr判断A类里是否有属性“num”
print(hasattr(A,"NUM"))
print(A.__dict__)    #查询A中所有属性
#-------------运行结果--------------
False
True
{'NUM': 1, 'NAME': 'Ydd', '_A__YEAR': 2018,........}
上一篇 下一篇

猜你喜欢

热点阅读