python是先运行metaclass还是先有类属性解析

 更新时间:2023年05月31日 09:46:34   作者:ponponon  
这篇文章主要为大家介绍了python是先运行metaclass还是先有类属性的问题原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

答案

先有 “类属性”,再有 “运行 metaclass”

# 定义一个元类
class CustomMetaclass(type):
    def __new__(cls, name, bases, attrs):
        print('> cls', cls)
        print('> name', name)
        print('> attrs', attrs)
        print('> cls dict', cls.__dict__)
        # 在创建类时修改属性
        new_attrs = {}
        for attr_name, attr_value in attrs.items():
            if isinstance(attr_value, str):
                new_attrs[attr_name] = attr_value.upper()
            else:
                new_attrs[attr_name] = attr_value
        obj = super().__new__(cls, name, bases, new_attrs)
        print(obj.__dict__)
        print(type(obj))
        return obj
# 使用元类创建类
class MyClass(metaclass=CustomMetaclass):
    name = 'John'
    age = 30
    greeting = 'Hello'
    def say_hello(self):
        print(self.greeting)
# 创建类的实例并调用方法
obj = MyClass()
print(obj.name)         # 输出: 'JOHN'
print(obj.age)          # 输出: 30
obj.say_hello()         # 输出: 'Hello'

输出结果

> cls <class '__main__.CustomMetaclass'>
> name MyClass
> attrs {'__module__': '__main__', '__qualname__': 'MyClass', 'name': 'John', 'age': 30, 'greeting': 'Hello', 'say_hello': <function MyClass.say_hello at 0x1025c2200>}
> cls dict {'__module__': '__main__', '__new__': <staticmethod(<function CustomMetaclass.__new__ at 0x1025c2290>)>, '__doc__': None}
{'__module__': '__MAIN__', 'name': 'JOHN', 'age': 30, 'greeting': 'HELLO', 'say_hello': <function MyClass.say_hello at 0x1025c2200>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None}
<class '__main__.CustomMetaclass'>
JOHN
30

以上就是python是先运行metaclass还是先有类属性解析的详细内容,更多关于python metaclass类属性的资料请关注脚本之家其它相关文章!

相关文章

  • Python读写及备份oracle数据库操作示例

    Python读写及备份oracle数据库操作示例

    这篇文章主要介绍了Python读写及备份oracle数据库操作,结合实例形式分析了Python针对Oracle数据库操作的相关库安装,以及使用cx_Oracle与pandas库进行Oracle数据库的查询、插入、备份等操作相关实现技巧,需要的朋友可以参考下
    2018-05-05
  • Python做智能家居温湿度报警系统

    Python做智能家居温湿度报警系统

    本文为大家带来了Python通过HTTP协议做一个廉价的温湿度报警系统。感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • Python函数参数类型及排序原理总结

    Python函数参数类型及排序原理总结

    这篇文章主要介绍了Python函数参数类型及排序原理总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 利用Python实现K-Means聚类的方法实例(案例:用户分类)

    利用Python实现K-Means聚类的方法实例(案例:用户分类)

    k-means是发现给定数据集的k个簇的算法,也就是将数据集聚合为k类的算法,下面这篇文章主要给大家介绍了关于利用Python实现K-Means聚类的相关资料,需要的朋友可以参考下
    2022-05-05
  • Python中Django框架利用url来控制登录的方法

    Python中Django框架利用url来控制登录的方法

    这篇文章主要介绍了Python中Django框架利用url来控制登录的方法,实例分析了Django框架实现URL登陆的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 基于Python实现敲击木鱼积累功德效果

    基于Python实现敲击木鱼积累功德效果

    最近大家都很流行用手机敲击电子木鱼积累功德,这在很多短视频中也常常见到。本文将用Python语言实现这一效果,感兴趣的小伙伴开业了解一下
    2022-11-11
  • python数据可视化Seaborn绘制山脊图

    python数据可视化Seaborn绘制山脊图

    这篇文章主要介绍了利用python数据可视化Seaborn绘制山脊图,山脊图一般由垂直堆叠的折线图组成,这些折线图中的折线区域间彼此重叠,此外它们还共享相同的x轴.下面来看看具体的绘制过程吧,需要的小伙伴可以参考一下
    2022-01-01
  • 利用Python探测附近WIFI密码的详细代码

    利用Python探测附近WIFI密码的详细代码

    这篇文章主要介绍了利用Python探测附近WIFI密码,基于python脚本实现wifi密码的暴力破解从而实现免费蹭网,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-01-01
  • 基于python实现生成指定大小txt文档

    基于python实现生成指定大小txt文档

    这篇文章主要介绍了基于python实现生成指定大小txt文档,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Matplotlib中rcParams使用方法

    Matplotlib中rcParams使用方法

    这篇文章主要介绍了Matplotlib中rcParams使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论