zoukankan      html  css  js  c++  java
  • 元类

    一切的类都是通过type这个类来创建的,例如:

     1 class Foo:
     2     a = 1
     3     pass
     4 
     5 
     6 print(type(Foo))
     7 print(Foo.__dict__)
     8 
     9 
    10 def __init__(self, name, age):
    11     self.name = name
    12     self.age = age
    13 
    14 
    15 f1 = type('crazy', (object,), {'a': 1, '__init__': __init__})
    16 print(type(f1))
    17 print(f1.__dict__)
    18 ff = f1('alex',18)
    19 print(ff.name)
    20 print(ff.age)
    21 输出:
    22 <class 'type'>
    23 {'__module__': '__main__', 'a': 1, '__dict__': <attribute '__dict__' of 'Foo' objects>, '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__doc__': None}
    24 <class 'type'>
    25 {'a': 1, '__init__': <function __init__ at 0x00978A00>, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'crazy' objects>, '__weakref__': <attribute '__weakref__' of 'crazy' objects>, '__doc__': None}
    26 alex
    27 18
     1 class Mytype(type):
     2     def __init__(self, a, b, c):
     3         print(a)
     4         print(b)
     5         print(c)
     6 
     7     def __call__(self, *args, **kwargs):
     8         obj = object.__new__(self)
     9         self.__init__(obj, *args, **kwargs)
    10         return obj
    11 
    12 
    13 class Foo(metaclass=Mytype):  # Foo = Mytype(Foo,'Foo',(),{})
    14     def __init__(self, name, age):
    15         self.name = name
    16         self.age = age
    17 
    18 
    19 f1 = Foo('alex', 28)
    20 print(f1.__dict__)
    21 输出:
    22 Foo
    23 ()
    24 {'__module__': '__main__', '__qualname__': 'Foo', '__init__': <function Foo.__init__ at 0x00698A00>}
    25 {'name': 'alex', 'age': 28}
  • 相关阅读:
    跟我一起写 Makefile
    NFS服务器配置
    q
    tar命令的详细解释
    etc/xinetd.d目录介绍
    ubuntu 10.04下的配置tftp服务器
    莫队板子
    Day8(分块)
    字符串板子
    字符串练习题
  • 原文地址:https://www.cnblogs.com/ch2020/p/12506593.html
Copyright © 2011-2022 走看看