python 元类 type metaclass

2018-06-18 00:18:06来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

python中一切皆对象,类对象创建实例对象,元类创建类对象,元类创建元类。

元类创建类对象有2中方式:

一、type方法

type(类名, 由父类名称组成的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))

1 Test = type("Test", (), {})
2 print(Test)
1 <class '__main__.Test'>

二、metaclass

 1 # 元类会自动将你通常传给‘type’的参数作为自己的参数传入
 2 def upper_attr(future_class_name, future_class_parents, future_class_attr):
 3     '''返回一个类对象,将属性都转为大写形式'''
 4     #  选择所有不以'__'开头的属性
 5     print(future_class_name, future_class_parents, future_class_attr)
 6     attrs = ((name, value) for name, value in future_class_attr.items()
 7              if not name.startswith('__'))
 8     # 将它们转为大写形式
 9     uppercase_attr = dict((name.upper(), value) for name, value in attrs)
10 
11     # 通过'type'来做类对象的创建
12     return type(future_class_name, future_class_parents, uppercase_attr)
13 
14 
15 # __metaclass__ = upper_attr  # 这会作用到这个模块中的所有类
16 
17 
18 class Foo(object, metaclass=upper_attr):
19     # 我们也可以只在这里定义__metaclass__,这样就只会作用于这个类中
20     bar = 'bip'
21 
22 
23 print(hasattr(Foo, 'bar'))
24 # 输出: False
25 print(hasattr(Foo, 'BAR'))
26 # 输出:True
27 
28 f = Foo()
29 print(f.BAR)
30 # 输出:'bip'
1 Foo (<class 'object'>,) {'__module__': '__main__', '__qualname__': 'Foo', 'bar': 'bip'}
2 False
3 True
4 bip

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python模块之virtualenvwrapper

下一篇:python实战===一句python代码搭建FTP服务