分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

metaclass 了解一下

发布时间:2023-09-06 01:52责任编辑:顾先生关键词:classmeta

创建类的两种方式

方式一:class Foo(object,metaclass=type): ???CITY = "bj" ???def func(self,x): ???????return x + 1方式二:Foo = type('Foo',(object,),{'CITY':'bj','func':lambda self,x:x+1})

类的演变

演变1:class MyType(type): ???def __init__(self,*args,**kwargs): ???????print('创建类之前') ???????super(MyType,self).__init__(*args,**kwargs) ???????print('创建类之后')Base = MyType('Base',(object,),{})# class Base(object,metaclass=MyType):# ????passclass Foo(Base): ???CITY = "bj" ???def func(self, x): ???????return x + 1演变2:class MyType(type): ???def __init__(self,*args,**kwargs): ???????print('创建类之前') ???????super(MyType,self).__init__(*args,**kwargs) ???????print('创建类之后')def with_metaclass(arg): ???return MyType('Base',(arg,),{}) # class Base(object,metaclass=MyType): passclass Foo(with_metaclass(object)): ???CITY = "bj" ???def func(self, x): ???????return x + 1演变3:class MyType(type): ???def __init__(self,*args,**kwargs): ???????super(MyType,self).__init__(*args,**kwargs)class Foo(object,metaclass=MyType): 

总结

1. 默认类由type实例化创建。2. 某个类指定metaclass=MyType,那么当前类的所有派生类都由于MyType创建。3. 实例化对象 ???- type.__init__ ????????????- type.__call__ ???- 类.__new__ ???- 类.__init__

metaclass 了解一下

原文地址:https://www.cnblogs.com/iyouyue/p/8981983.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved