- 1 # -*- coding: utf-8 -*-
- 2 """
- 3 @Time : 2023-06-25 23:14
- 4 @Description :
- 5 @Author : Mr.Gu
- 6 """
- 7 import time
- 8 import types
- 9
- 10
- 11 class Meta(type):
- 12 def __new__(cls, name, bases, attrs):
- 13 for key, value in attrs.items():
- 14 if isinstance(value, types.FunctionType) and not key.startswith("_"):
- 15 attrs[key] = property(value)
- 16 return super().__new__(cls, name, bases, attrs)
- 17
- 18 def __call__(cls, *args, **kwargs):
- 19 inst = super().__call__(*args, **kwargs)
- 20 inst.created_at = time.time()
- 21 return inst
- 22
- 23
- 24 class Valley(metaclass=Meta):
- 25 def func(self):
- 26 print("testing")
- 27
- 28
- 29 Valley().func
- 30 print(Valley().created_at)
复制代码 元类在工作中一般很少用到,除非手写框架
1、__new__创建类时调用
2、__call__创建与初始化类实例时调用
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |