Python魔法属性和方法

news2025/1/10 3:25:52

1.魔法属性

__doc__

获取类或方法的描述信息

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass


foo = Foo()

print("类对象的__doc__:", Foo.__doc__)
print("实例对象的__doc__:", foo.__doc__)
print("实例对象方法的__doc__:", foo.func.__doc__)

在这里插入图片描述

__moudle__

获取操作的所属模块,当模块在当前执行文件中时,显示__main__

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass


foo = Foo()

print("类对象的__module__:", Foo.__module__)
print("实例对象的__module__:", foo.__module__)
print("实例对象方法的__module__:", foo.func.__module__)

在这里插入图片描述

__class__

获取操作对象的源对象。多用于通过实例对象反向获取类对象

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass

    @classmethod
    def cls_func(cls):
        print("cls方法被调用")


foo = Foo()

print("类对象的源引用为Type元类:", Foo.__class__)
print("实例对象的源引用为Foo类对象:", foo.__class__)
print(Foo)

在这里插入图片描述

__name__

获取类或方法的名称

class Foo:
    """ 类对象__doc__的属性值"""

    def func(self):
        """ 类方法的__doc__属性值 """
        pass


foo = Foo()
print("类对象的__name__:", Foo.__name__)
print("实例对象方法的__name__:", foo.func.__name__)

在这里插入图片描述

__dict__

获取类或对象中的所有属性

class Province(object):
    country = 'China'

    def __init__(self, name, count):
        self.name = name
        self.count = count

    def func(self, *args, **kwargs):
        print('func')


# 获取类的属性,即:类属性、方法
print(Province.__dict__)
# 输出:{'__dict__': <attribute '__dict__' of 'Province' objects>, '__module__': '__main__', 'country': 'China', '__doc__': None, '__weakref__': <attribute '__weakref__' of 'Province' objects>, 'func': <function Province.func at 0x101897950>, '__init__': <function Province.__init__ at 0x1018978c8>}

obj1 = Province('山东', 10000)
print(obj1.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 10000, 'name': '山东'}

obj2 = Province('山西', 20000)
print(obj2.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 20000, 'name': '山西'}

在这里插入图片描述

2.魔法方法

__new__()

为对象分配内存空间,同时还返回对象的引用,在__init__()之前被调用

__init__ ()

初始化实例对象属性的方法,创建实例对象时被调用。

__init__方法中定义的实例属性如果指向的是方法(包括被 property装饰的方法),在实例化时,会立即执行指向的方法,并将return值赋值给实例属性。当实例属性被多次调用时,也不会去执行指向的方法。

注意:利用该特效可以解决一次赋值多次使用的高耗时场景

class Demo:

    def __init__(self):
        self.excel_info = self.mock_read_excel()
        print("实例化完成")

    def mock_read_excel(self):
        print("读取文件")
        return "excel数据"

    def mock_use_1(self):
        return self.excel_info

    def mock_use_2(self):
        return self.excel_info

    def mock_use_3(self):
        return self.excel_info


if __name__ == '__main__':
    demo = Demo()
    demo.mock_use_1()
    demo.mock_use_2()
    demo.mock_use_3()

在这里插入图片描述

__del__()

当对象在内存中被释放时被调用

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。

class Foo:
    def __del__(self):
        pass

__call__()

对象后面加括号,触发执行

注:__init__方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

class Foo:
    def __init__(self):
        pass

    def __call__(self, *args, **kwargs):
        print('__call__')


obj = Foo()  # 执行 __init__
obj()  # 执行 __call__

__str__ ()

如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

class Foo:
    def __str__(self):
        return 'laowang'


obj = Foo()
print(obj)
# 输出:laowang

__getitem__()__setitem__(),__delitem__()

用于索引操作,如字典。以上分别表示获取、设置、删除数据

class Foo(object):

    def __getitem__(self, key):
        print('__getitem__', key)

    def __setitem__(self, key, value):
        print('__setitem__', key, value)

    def __delitem__(self, key):
        print('__delitem__', key)


obj = Foo()

result = obj['k1']      # 自动触发执行 __getitem__
obj['k2'] = 'laowang'   # 自动触发执行 __setitem__
del obj['k1']           # 自动触发执行 __delitem__

__setattr__()__getattr__()

  • __setattr__():定义属性时被调用。包括外部和内部

  • __getattr__():如果类中不定义该方法,在获取不存在的实例属性时会报 AttributeError;如果定义了该方法,当获取未被定义的属性时执行该方法,如果成功获取到属性则不执行该方法。

class Province(object):

    def __init__(self):
        self.v = "test"     # 在内部,每一次定义实例属性都会调用 __setattr__ 方法
        a = self.s          # 在内部,每一次获取实例属性但属性不存在时调用 __getattr__ 方法
        print("a变量的值为 " + a)
        b = self.v
        print("b变量的值为 " + b)

    def __setattr__(self, key, value):
        print("定义实例属性时被调用")
        super(Province, self).__setattr__(key, value)

    def __getattr__(self, item):
        print("当获取未被定义的属性时执行该方法,如果获取到属性则不调用该方法")
        return "null"


print("===================实例化")
t = Province()
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
print("===================外部设置实例属性")
setattr(t, "c", "test1234")
t.d = "test2234"

print("===================外部获取实例属性")
print(t.v)
print(getattr(t, "d"))
print(t.ssss)   # 获取不存在的属性
print(getattr(t, "fffff"))  # 获取不存在的属性

在这里插入图片描述

__iter__()

让一个对象变得可以迭代

__next__()

定义一个迭代器,让其能够通过next(迭代对象的迭代器)对一个可迭代对象进行迭代

__enter__(),__exit__()

用于定义上下文管理器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电力需求侧管理是什么及意义

安科瑞虞佳豪 电力需求侧管理是指综合采取合理可行的技术、经济和管理措施&#xff0c;在用电环节实施需求响应、节约用电、电能替代、绿色用电、智能用电、有序用电&#xff0c;推动电力系统安全降碳、提效降耗。 我国分别于2010年和2017年发布了两版电力需求侧管理办法。国…

元”启长三角 共享新未来!长三角数字干线元宇宙创新发展论坛暨第一届长三角元宇宙日在长三角绿洲智谷·赵巷成功举办

5月30日下午&#xff0c;由工信部网络安全产业发展中心&#xff08;工信部信息中心&#xff09;、长三角投资&#xff08;上海&#xff09;有限公司、青浦区经济委员会、青浦区科学技术委员会、青浦区科学技术协会指导&#xff0c;北京大数据协会元宇宙专委会主办&#xff0c;长…

ISO21434 项目网络安全管理(三)

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 4.1 网络安全责任 4.2 网络安全规划 4.3 裁剪 4.4 重用 4.5 非上下文组件 4.6 现成组件 4.7 网络安全案例&#xff08;Cybersecurity case&#xff09; 4.8 网络安全评估&#…

网店系统如何建设?如何搭建网店?

互联网的不断发展&#xff0c;越来越多的商家开始意识到建设自己的网店是非常必要和重要的。通过搭建网店系统&#xff0c;商家无需承担大量的租赁、装修等成本&#xff0c;同时可以将商品推广到更广阔的市场&#xff0c;提高销售额。那么&#xff0c;网店系统如何建设呢&#…

[QCA6174]QCA6174 DFS认证4.6.2.3 Channel Shutdown出现跳转之后在原始信道上有弱信号问题分析及解决方案

WIFI DFS测试要求 Master设备需要测试的项目 4.6.2.1 Channel Availability Check ---信道可用性检查 定义其作为雷达脉冲检测机制,当雷达脉冲出现时所占用的信道需要能被设备检测到已经被占用。当相关信道未被占用时,这些信道被称为Avaliable Channel可用信道 4.6.2.2 In…

【TA 100】Flow Map实现水体流动效果

最近刚好学到Shader Graph水体流动&#xff0c;看下其他实现方式记录下 1 什么是flow map 1 什么是Flow map? flowmap的实质:一张记录了2D向量信息的纹理Flow map上的颜色(通常为RG通道) 记录该处向量场的方向&#xff0c;让模型上某一点表现出定量流动的特征。通过在shader中…

Python接口自动化—接口测试用例和接口测试报告模板

简介 当今社会在测试领域&#xff0c;接口测试已经越来越多的被提及&#xff0c;被重视&#xff0c;而且现在好多招聘信息要对接口测试提出要求。区别于传统意义上的系统级别测试&#xff0c;很多测试人员在接触到接口测试的时候&#xff0c;也许对测试执行还可以比较顺利的上…

vue高频面试题(一)

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 VUE Vue2和3对比 脚手架创建项目 之前有个国企&#xff0c;问到了怎么用脚手架创建vue项…

真空热压烧结炉JZM-1200技术参数一览表

真空热压烧结炉是将真空、气氛、热压成型、高温烧结结合在一起设备&#xff0c;适用于粉末冶金、功能陶瓷等新材料的高温热成型。如应用于透明陶瓷、工业陶瓷等金属以及由难容金属组成的合金材料的真空烧结以及陶瓷材料碳化硅和氮化硅的高温烧结&#xff0c;也可用于粉末和压坯…

2. 量化多因子数据清洗——去极值、标准化、正交化、中性化

一、去极值 1. MAD MAD&#xff08;mean absolute deviation&#xff09;又称为绝对值差中位数法&#xff0c;是一种先需计算所有因子与平均值之间的距离总和来检测离群值的方法. def extreme_MAD(rawdata, n): median rawdata.quantile(0.5) # 找出中位数 new_median (abs(…

Mybatais-plus超详细教程

文章目录 前言什么是Mybatis-plus特性引入依赖配置日志Service CRUD 接口SaveSaveOrUpdateRemoveUpdateGetListPageCount Chainqueryupdate Mapper CRUD 接口InsertDeleteUpdateSelect 赠送 前言 在学习Mybatis-plus之前&#xff0c;这里默认大家都已经对mybatis使用有了一定的…

召回评价指标NDCG、MAP

【MAP】 1、AP A P ∑ i 1 n r e l ( i ) p i AP \sum_{i1}^{n}\frac{rel(i)}{p_i} APi1∑n​pi​rel(i)​ 其中 n 表示候选序列长度&#xff0c; p i p_i pi​表示第 i 个 item 的位置 本质是对每个位置item的分数加一个基于位置的筛选.简单粗暴&#xff0c;直接除以位置…

NeRF与三维重建专栏(三)nerf_pl源码部分解读与colmap、cuda算子使用

前言 上一章中我们介绍了NeRF原理、传统体渲染方法以及两者之间的联系&#xff0c;本章中我们将讲解colmap的安装以及使用&#xff0c;部分nerf_pl源码&#xff0c;同时在开发过程中&#xff0c;由于部分操作python/torch不支持&#xff0c;我们需要自己造轮子&#xff0c;且在…

37 KVM管理设备-管理设备直通

文章目录 37 KVM管理设备-管理设备直通37.1 PCI直通37.2 SR-IOV直通37.2.1 概述37.2.2 操作方法37.2.2.1 开启网卡的SR-IOV模式37.2.2.2 获取PF和VF的PCI BDF信息37.2.2.3 识别和管理PF/VF对应关系37.2.2.4 挂载SR-IOV网卡到虚拟机中 37.2.3 HPRE加速器SR-IOV直通 37 KVM管理设…

IOS上架流程详解,包含审核避坑指南!

准备 开发者账号完工的项目 上架步骤 一、创建App ID二、创建证书请求文件 &#xff08;CSR文件&#xff09;三、创建发布证书 &#xff08;CER&#xff09;四、创建Provisioning Profiles配置文件 &#xff08;PP文件&#xff09;五、在App Store创建应用六、打包上架 一、…

又一运维利器:资源监控微应用

过去几个月&#xff0c;优维在新的资源监控微应用相关能力的研发上投入大量的时间与精力。 上周三&#xff0c;优维专门召开了一场资源监控微应用发布会&#xff0c;介绍了优维的监控微应用的功能亮点和后续规划。 下面就跟着鹿小U一起来具体了解一下。 01 过去&#xff0c…

需求不完备测试解决方案——分布式微服务架构测试实践

1痛点和研究背景 目前随着分布式核心下移和小型机下线的趋势&#xff0c;主流系统架构已逐步演变为CCETDSQL。而在这一演进过程中也陆续暴露出来一些痛点难点问题&#xff0c;需要我们着力解决。为此&#xff0c;我们聚焦于分布式架构下需求、架构、数据这三个方面的痛点问题探…

【Linux驱动】VScode 环境简单配置

在开始编写驱动之前&#xff0c;我们需要保证良好的编码环境&#xff0c;这里编写代码所使用的编辑器是VScode&#xff0c;如果进行环境配置&#xff0c;可能会提示很多错误&#xff0c;比如头文件找不到、内核函数的定义无法跳转等等。 VScode 在这里只作为编辑器使用&#x…

Springboot配置Yml多环境

文章目录 学习链接前言pom.xmlapplication.ymlapplication-dev.yml 开发环境配置application-prod.yml 线上环境配置logback.xml 日志配置 学习链接 easypan Spring Boot手把手教学(2)&#xff1a;使用yml多环境配置和创建多环境profile打包 springboot 配置多环境使用yml配置…

自动化测试介绍和分类,看这一篇就够了

自动化测试介绍及分类 什么是自动化测试? 自动化测试是软件测试活动中一个重要的分支和组成部分,即利用工具或脚本达到测试目的,没有人工或者极少人工参与的软件测试活动称为自动化测试. 自动化测试的优势有哪些? 方便进行回归测试,当软件的版本发布比较频繁的时候,自动化…