当前位置: 首页 > news >正文

[python] python中的魔法方法和属性

一 魔法属性

__module__ : 表示当前操作对象所在的模块

__class__ 当前操作对象所在的类

__doc__ 类的描述信息,函数也可以,必须在最上面一行,且用多行注释来写

class Sinstance(object):"""这是一个重写__new__方法的单例类"""obj = Nonedef __new__(cls, *args, **kwargs):"""__new__<UNK>"""if cls.obj is None:cls.obj = super().__new__(cls)return cls.objdef __init__(self):print("__init__")
  • 比如这种方式就能够别__doc__属性捕获到
    """这是一个重写__new__方法的单例类"""
def test():"""函数的描述信息"""
print(Sinstance.__doc__)
print(Sinstance.__new__.__doc__)
print(test.__doc__)
print(test.__module__)
print(test.__class__)
p1 = Sinstance()
print(p1.__module__)
print(p1.__class__)

二 魔法方法

__str__():对象的描述信息,实例对象 和 __doc__属性不同这个是返回的是类对象的描述信息

  • 如果类中定义了此方法,那么再打印对象是,默认输出该方法的返回值,也就是打印该方法中的返回值,不再打印地址的引用
    # __str__方法必须有返回,并且是字符串类型
class strtest(object):name = "python"def __str__(self):return "测试"+self.name+"__str__魔法方法"
str_test = strtest()
print(str_test)
# __del__() : 析构函数 在删除某个对象时调用# __call__(): 使一个实例对象成为可调用对象 (像函数那样被调用)
  • 这个就会输出false因为没有定义__call__方法
class enablecall_test(object):"""测试可调用对象"""pass
callobject = enablecall_test()
print(callable(callobject))

我们来定义一个__call__方法

  • 使用实例对象()-->比如下面的callobject()实际上就是调用-->__call__方法
class enablecall_test(object):"""测试可调用对象"""def __call__(self):print("enablecall_test")
# 其实就是在调用__call__方法
callobject = enablecall_test()
callobject()
print(callable(callobject))

相关文章:

  • Spring Boot 博客项目深度分析报告
  • k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持
  • iOS WebView和WKWebView怎么调试?
  • 行业趋势与技术创新:驾驭工业元宇宙与绿色智能制造
  • Large-Scale Language Models: In-Depth Principles and Pioneering Innovations
  • 【Linux网络】————详解TCP三次握手四次挥手
  • 【android bluetooth 协议分析 12】【A2DP详解 1】【车机侧蓝牙音乐免切源介绍】
  • AI时代的弯道超车之第八章:具体分享几个AI实际操作方法和案例
  • Kotlin Multiplatform与Flutter、Compose共存:构建高效跨平台应用的完整指南
  • [Spring]-组件的生命周期
  • 碎片笔记|AI生成图像溯源方法源码复现经验(持续更新中……)
  • 设计模式-中介者模式
  • 研读论文《Attention Is All You Need》(4)
  • 【Oracle专栏】清理告警日志、监听日志
  • 如何创建自动工作流程拆分Google Drive中的PDF文件
  • 【kafka】kafka概念,使用技巧go示例
  • 【!!!!终极 Java 中间件实战课:从 0 到 1 构建亿级流量电商系统全链路解决方案!!!!保姆级教程---超细】
  • 试除法判断素数优化【C语言】
  • 解决docker alpine缺少字体的问题 Could not initialize class sun.awt.X11FontManager
  • 使用 Docker Desktop 安装 Neo4j 知识图谱
  • 商务部:长和集团出售港口交易各方不得规避审查
  • 中科飞测将投资超10亿元,在上海张江成立第二总部
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业
  • 沈阳卫健委通报“健康证”办理乱象:涉事医院已被立案查处
  • 从这些电影与影像,看到包容开放的上海
  • 菲律宾举行中期选举