博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
metaclass 了解一下
阅读量:2225 次
发布时间:2019-05-09

本文共 1192 字,大约阅读时间需要 3 分钟。

创建类的两种方式

方式一: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__

转载于:https://www.cnblogs.com/iyouyue/p/8981983.html

你可能感兴趣的文章
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>