zoukankan      html  css  js  c++  java
  • Python_基础_(元类)

    一,

    在Python中一切皆对象,类本身就是一个对象,当使用关键字class创建一个类时,Python解释器在加载class时就会创建一个对象

    ## 证明一个类是type的对象的例子

    class Test:
        pass
    
    t = Test()
    print(type(t))      # <class '__main__.Test'>
    print(type(Test))   # <class 'type'>
    # t为类Test的对象
    # 类Test时类type的一个对象

    ## 什么是元类

    1,元类是类的类,是类的模板

    2,元类用来控制如何创建类的,正如创建对象的模板一样

    3,元类的示例为类,正如类的实例为对象(t为类Test的一个实例,类Test是type的一个实例)

    4,type是python的一个内建元类,用来控制直接生成类,python中任何class定义的类都是type实例化的对象

    ## 如何用type表示一个类

    class Test:
        pass
    print(Test) # <class '__main__.Test'>
    
    Test_1 = type("Test_1",(object,),{"x":1})    
    # type("类名",(类继承的类以元组形式写入),"类中的属性以字典方式写入")
    print(Test_1)   # <class '__main__.Test_1'>

    ## 用一个type表示一个类,并在类中添加方法

    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    # 备选内置方法 test
    def test(self):
        print("我是test方法")
    
    Test_1 = type("Test_1",(object,),{"x":1,"__init__":__init__,"test":test})
    print(Test_1)   # <class '__main__.Test_1'>
    t = Test_1("henry",18)
    print(t.x)      # 1
    print(t.name)   # henry
    print(t.test()) # 我是test方法 

    # 自定义元类

    如果一个类没有自定义自己的元类,那么它的元类就是type,除了使用type来作为自己的元类,用户也可通过继承type来自定义元类

    ## 自定义元类

    class MyType(type):
        def __init__(self,test_class,test_super,test_attr):
            print(test_class)   # 类Test的类名: Test
            print(test_super)   # 类Test的父类元组:()
            print(test_attr)    # 类Test的属性字典:{'__module__': '__main__', '__qualname__': 'Test'}
    
    class Test(metaclass=MyType):
        # Test = Mytype("Test",(),{})
        # 传了4个参数给MyType
        def __init__(self,name):
            self.name = name
    
    print(Test)         # 拿到对象Test
    t = Test("henry")   # 可以进行实例化
    print(t.__dict__)

    ....待完成

  • 相关阅读:
    WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
    Django安装与使用
    初识Django
    python学习之xlrd的使用
    python 学习笔记
    根据当前日期生成一个唯一标识的名称
    用Python生成组织机构代码,附源码
    IO流基础
    多线程
    日期时间类
  • 原文地址:https://www.cnblogs.com/Doaoao/p/10171214.html
Copyright © 2011-2022 走看看