zoukankan      html  css  js  c++  java
  • 08.5 metaclass

    # -*- coding: utf-8 -*-
    # @Time : 2021/8/1 18:48
    # @Author : zy7y
    # @Gitee : https://gitee.com/zy7y
    # @File : metaclass.py
    # @Project : PythonBooks
    """
    类也是对象,type是创建类的类, type 也是object 的子类
    """
    
    
    # 动态创建类 type
    """
     type(object_or_name, bases, dict)
            type(object) -> the object's type
            type(name, bases, dict) -> a new type
            # (copied from class doc)
    """
    
    def say(self):
        """该方法 需要给实例,绑定到元类上"""
        print("say.")
        return 1
    
    # 创建 User类, () 不继承类, {} 属性 或者方法
    
    User = type("User", (), {"name": "小明", "say": say})
    
    class Super(type):
        def __new__(cls, *args, **kwargs):
            return super().__new__(cls, *args, **kwargs)
    
    
    class User(metaclass=Super):
        """实例化过程中 寻找metaclass ,通过它去创建User类, 找不到时 就会调用type 创建类"""
        def __str__(self):
            return "User obj"
    
    if __name__ == '__main__':
        user = User()
        # print(user.name)
        # print(user.say())
        print(user)
    
    作者:zy7y
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    闭包
    关于this
    插件开发(对象级)
    IFC
    flex.css
    js移动端滑动事件
    Android 手机下输入框获取焦点时, 输入法挡住输入框的 bug
    vue 组件化spreadjs预览excel
    feign 熔断工厂 fallbackFactory的简单实现
    bat脚本批量启动程序
  • 原文地址:https://www.cnblogs.com/zy7y/p/15087421.html
Copyright © 2011-2022 走看看