python中的元类与应用
程序员文章站
2022-03-04 14:30:03
...
# 定义一个类
class Test(object):
num = 100
# 创建对象
test = Test()
print(test.num)
在python中,类可以创建对象,请问类又是由谁创建,答案是元类
元类:用来创建类的特殊类
type出来可以用来查看对象的类型之外,还可以用来创建元类
元类的创建
# 定义一个实例方法
def test1(self):
print("这是一个实例方法")
# 定义一个类方法
@classmethod
def test2(cls):
print("这是一个类方法")
# 定义一个静态方法
@staticmethod
def test3():
print("这是一个静态方法")
# 用type创建元类(继承object)
Test = type("Test",(object,),{"test1":test1,"test2":test2,"test3":test3})
# 创建对象
test = Test()
元类的应用
元类与装饰器功能类似,即在不改变原先代码的前提下,在外部增加类的功能
# 将类中属性小写替换成大写
def test(class_name, class_parent, class_attr):
# 定义一个空字典
new_attr = dict()
# 遍历属性字典,把不是__开头的属性改成大写
for name, value in class_attr.items():
if not name.startswith("__"):
new_attr[name.upper()] = value
# 返回创建好的类
return type(class_name, class_parent, new_attr)
# metaclass的值为一个函数表示使用一个函数来创建一个类
class Test(object, metaclass = test):
a = "hello"
# 创建对象
test = Test()
print(test.A) # 此时属性a已替换为大写,输出结果为"hello"