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,........}
网友评论