Python_魔法属性和方法

python中的魔法属性和方法 魔法属性: 首先,我们先谈一谈什么叫做魔法属性? 魔法属性和方法是Python内置的一些属性和方法,有着特殊的含义。命名时前后加上两个下划线,在执行系统特定操作时,会自动调用。 那么接下来,我们就列举一些常见的魔法属性和方法。 1._init_: 初始化方法,在创建类对象的时候,会自动执行方法 class Student(object): def __init__(self,name,ag... 阅读详情

目录

魔法属性

__doc__

__moudle__

__class__

__name__

__dict__

魔法方法

__new__()

__init__ ()

__del__() 

__call__()

__str__ ()

__getitem__(),__setitem__(),__delitem__()

__setattr__()、__getattr__()

__iter__()

__next__()

__enter__(),__exit__()


在接下来的文章中,我将与大家伙一起探讨Python编程语言中的魔法属性和方法。

Python作为一门功能强大且灵活的编程语言,提供了许多特殊的属性和方法,被称为“魔法属性和方法”。

这些特殊的属性和方法可以帮助我们实现更高级的功能,例如操作对象属性、修改类行为以及自定义运算符等。

无论你是初学者还是有经验的开发者,本文将为你详细介绍Python中的魔法属性和方法,并帮助你更好地理解和应用它们。让我们一起往下看吧!

魔法属性

__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': '山西'}

魔法方法

__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__()

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

# -*- coding:utf-8 -*-

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()

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__()

用于定义上下文管理器


-事必有法,然后有成- 最后祝大家早日达到测试的天花板!

python学习之单例模式和魔法方法&属性 res = super().__new__(cls) #方法重写,复用object中的__new__()方法res里面保存的是实例对象的引用,__new__()是静态方法,形参里面有cls,实参就必须传。一个对象的实例化过程:首先执行__new__(),如果没有重写__new__(),则默认调用object里面的__new__(),返回一个实例对象,2.__init__()是定义实例属性,__new__()是返回对象的引用。3.__init__()是实例级别的方法,__new__()是类级别的方法。 阅读详情

相关推荐

Python中的魔法属性

被双下划线__包裹住的魔法方法、属性__,可能看起来不是很有用,但是一旦你需要它们,你会感到庆幸它们的存在。

qq_43629857的博客 3726

一篇掌握python魔法方法详解

本编研究下python的内置属性/魔法方法/魔法函数 这里说的内置属性,是指__xxx__的方法和属性,有的地方也称为魔法方法,叫法不一样。 本文概要 1.__init__和__new__的顺序、使用? 2.__getattribute__干嘛的? 3.__call__作用,与callable内置函数有着怎样的关系呢? 4.对象如何才能比较? __lt__、__gt__等 5.__getattr__、__setattr__、__delattr__何时触发? 6.__add__与__iadd__区别,何

沐雨云楼 1183

Python 魔法方法与属性

python的魔法方法很奇特,有些地方也称他为特殊方法。其结构是由两个下划线(“_”开始中间名称最后以两个下划线(“_”)结束的特殊指定方法,这有点类似java中的接口和abstract,是python中定义的一种规则,一种玩法。这也是python与java对于方法重写的一个较大的不同的地方.Java中我们可能会为了实现某种或某类相似的动作行为(action),从而使用接口式编程,抽象方法来抽象实现

胖蔡叨叨叨 2441

[python]魔术方法大全(三)-- 属性篇

这次我们主要来聊聊跟对象的属性有关的魔术方法。

weixin_68789096的博客 409

Python常见的魔术方法和魔术属性

Python的魔术方法(也称为特殊方法)是对象的一些特殊方法,它们都是以双下划线开头。并以双下划线结尾,例如__init__。 魔术方法所体现的设计思想是构成python风格的重要组成部分。

景天科技苑 1715

19、Python 魔法方法、属性和迭代器深入解析

本文深入解析了 Python 中的重要特性,包括魔法方法、属性、迭代器的使用,以及 super 函数、序列映射协议、继承内置类型、property 函数、静态方法和类方法的应用。通过丰富的代码示例和详细说明,帮助开发者掌握如何灵活运用这些特性编写高效且易维护的代码。无论是初学者还是有经验的 Python 开发者,都能从中受益。

fire9的博客 109

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

Python中的魔法属性和方法为对象提供了特殊的功能。魔法属性如__module__、__class__和__doc__分别表示对象所在的模块、类和描述信息。例如,Sinstance类通过重写__new__方法实现单例模式,其描述信息可通过__doc__属性获取。魔法方法如__str__用于定义对象的字符串表示,__del__在对象删除时调用,__call__使实例对象可像函数一样被调用。例如,enablecall_test类通过定义__call__方法使其实例对象可调用。这些魔法属性和方法增强了Pytho

qq_45280097的博客 437

Python 类的魔法属性用法实例分析

本文实例讲述了Python 类的魔法属性用法。分享给大家供大家参考,具体如下: 魔法属性 无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下: 1. doc 表示类的描述信息 class Foo: 描述类信息,这是用于看片的神奇 def func(self): pass print(Foo.__doc__) #输出:类的描述信息 2. module 和 class module 表示当前操作的对象在那个模块 class 表示当前操作的对象的类是什么 test.py # -*- coding:utf-8

python魔法属性_python进阶之类常用魔法方法和魔法属性

前言前面我们总结过了python的关键字、运算符、内置函数、语法糖等与python魔法方法之间的关系,现在我们更细一点,看看python的面向对象编程有哪些常用的魔法属性和魔法方法。魔法属性对于一个类,python定义了许多可用的魔法属性,有些每个类都默认存在,有些需要用户手动定义。__dict____dict__属性可以说是一个类最常用的属性之一了,它又分为类的__dict__属性和实例的__d...

weixin_39719101的博客 197

PubMedBERT:生物医学NLP中的垂直领域预训练实践与性能突破

本文深入探讨了PubMedBERT在生物医学NLP领域的应用与性能突破。作为专为生物医学文本设计的预训练模型,PubMedBERT通过全词掩码策略和BLURB基准测试,显著提升了命名实体识别、关系抽取等任务的准确率。文章还提供了PubMedBERT的实战应用案例和代码示例,展示了其在医学文献检索和电子病历结构化中的卓越表现。

kite3的博客 283

STM32-DAC定时器触发三角波生成【频率与幅度精准控制】

本文详细介绍了STM32 DAC定时器触发三角波生成的原理与实现方法,涵盖硬件配置、频率与幅度精准控制技巧及代码实现。通过定时器触发DAC模块,可灵活调节三角波的频率和幅度,适用于信号发生器等高精度应用场景。

weixin_29161785的博客 452

python常用魔法方法_python进阶之类常用魔法方法和魔法属性

前言前面我们总结过了python的关键字、运算符、内置函数、语法糖等与python魔法方法之间的关系,现在我们更细一点,看看python的面向对象编程有哪些常用的魔法属性和魔法方法。魔法属性对于一个类,python定义了许多可用的魔法属性,有些每个类都默认存在,有些需要用户手动定义。__dict____dict__属性可以说是一个类最常用的属性之一了,它又分为类的__dict__属性和实例的__d...

weixin_39821378的博客 130

十五天学会Autodesk Inventor,看完这一系列就够了(七),工程图纸

不管哪种绘图软件,二维或三维绘图,最终均需要转换成工程图纸,才能交给现场人员进行制作,这是任一产品图都要经历的过程。那本章开始,我们一起看一下Inventor是如何实现工程图纸?

Crazydoubao的博客 4904

Python魔法属性和方法

_init__方法中定义的实例属性如果指向的是方法(包括被 property装饰的方法),在实例化时,会立即执行指向的方法,并将return值赋值给实例属性。注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。如果定义了该方法,当获取未被定义的属性时执行该方法,如果成功获取到属性则不执行该方法。初始化实例对象属性的方法,创建实例对象时被调用。

Python编程学习的博客 855

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧和嵌入式开发实践。通过对比传统前后台系统和RTOS,展示了QP框架在资源占用、实时性和代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1173

【人工智能之深度学习】21. 自动驾驶感知实战:YOLOv4复杂天气优化方案(BDD100K全代码+效果对比)

摘要:自动驾驶摄像头在雨雾天气下易受图像模糊、目标遮挡影响,导致YOLOv4检测精度骤降。本文基于BDD100K公开数据集(含多天气场景),设计三阶段优化方案:1)物理建模生成雨雾效果(雨滴线条+大气散射模型),将恶劣天气样本占比从20%提升至40%;2)在YOLOv4颈部嵌入CBAM注意力机制,强化模糊区域特征提取;3)L1剪枝(30%)+TensorRT量化实现轻量化。需特别说明:本文为教学虚拟案例,不可直接用于车载部署,实际落地需结合多传感器融合与ISO 26262认证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1679

python魔法属性_python 魔法方法,属性和迭代器

(一)魔法方法在python中,有的名称在前后会加上两个下划线,具有特殊的含义,大部分会在某些条件下自动被调用。这里简单介绍几种重要的魔法方法。当然这是所有用途中的一小部分。(1)构造方法在类的定义中,我们常常加入构造方法。这样我们在创建该类的实例时,会自动执行该方法:class Bird(object):def __init__(self):self.hungry=Ture`构造方法继承的注意事...

weixin_39940182的博客 119

Python爬虫教程:抓取电商网站评论(以淘宝和京东为例)

通过本文的介绍,我们学会了如何使用Python编写爬虫,抓取淘宝和京东等电商平台的商品评论数据。我们介绍了如何使用电商平台提供的开放API以及如何通过模拟浏览器来抓取动态加载的数据。此外,我们还讨论了如何应对反爬虫技术,如何存储抓取的数据等。爬取电商平台的数据是一个强大的工具,能够为市场分析、消费者行为研究、产品优化等领域提供有力的支持。然而,在使用爬虫技术时,我们必须遵循法律法规,尊重平台的隐私政策,避免滥用数据。

2201_76125261的博客 1737

python魔法方法和普通方法_Python魔法方法之属性访问详解!

练习要求:写一个矩形类,默认有宽和高两个属性。如果为一个叫square的属性赋值赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长。技术分析我们先来看看有关于属性的四个魔法方法:getattr(self, name): 定义当用户试图获取一个不存在的属性时的行为。getattribute__(self, name)`:定义当该类的属性被访问时的行为(先调用该方法,查看是否存...

weixin_39980298的博客 123

14、5G物理层的灵活解决方案:广义频分复用(GFDM)

广义频分复用(GFDM)作为一种高度灵活的5G物理层多载波调制方案,能够满足多样化应用场景的需求,包括高吞吐量的比特管道通信、低功耗高连接数的物联网、超低延迟的触觉互联网以及广覆盖的无线区域网。通过参数化配置,GFDM可适配LTE资源网格,实现与现有系统的兼容与共存。其支持多种解调方式、干扰消除技术、OQAM映射及预编码机制,兼具低带外发射、高频谱效率和强鲁棒性。GFDM还能统一描述OFDM、FBMC、FTN等多种经典与先进波形,成为5G及未来通信系统中极具潜力的通用波形框架。

gold8的专栏 108

使用 MATLAB/Simulink 构建一个电机-液压联合控制系统的仿真模型

本文详细介绍了基于Simulink的电机与液压执行机构联合控制系统建模方法。通过7个步骤,系统讲解了从创建项目、搭建PMSM电机模型、建立逆变器与矢量控制模块,到构建液压泵和执行机构模型的完整过程。重点展示了如何设置关键参数、添加测量反馈模块,并提供了实用的代码片段。教程还包含仿真运行流程、结果分析指标及进阶建议,帮助读者掌握多物理场耦合系统建模的核心技术。该方法适用于机电液一体化系统设计,为工程实践提供有效参考。

amy_mhd的博客 613

Python的静态方法、类方法、属性方法和魔法方法

静态方法 静态方法的作用是可以更好的组织代码,防止代码变大后变得比较混乱。静态方法只是名义上归类管理,实际上在静态方法里访问不了类或则实例中的任何属性 静态方法使用场景 1)我们要写一个只在类中运行而不在实例中运行的方法.   2)经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法.   3)比如更改环境变量或者修改其他类的属性等能用到静态方法.   4)这种情况可以直接用函数解决, 但这样同样会扩散类内部的代码,造成维护困难. 调用方式 调用方式: 既可以被类直接调用,也可以

姜枨文的技术博客 857

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

本文介绍了Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

weixin_53245463的博客 564

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

萌新学 Python 之动态绑定属性和方法以及魔法函数

使对象兼容列表、字典的索引和键的操作,把对象当作列表和字典使用,列表还可以进行切片,__getitem__ 当作列表、字典只能进行。:使对象兼容列表、字典的索引和键的操作,把对象当作列表和字典使用,列表还可以进行切片,__setitem__ 当作列表、字典可以进行。:使对象兼容列表、字典的索引和键的操作,把对象当作列表和字典使用,列表还可以进行切片,__delitem__ 当作列表、字典可以进行。当实例属性存在时,修改实例属性值,当实例属性不存在时,添加实例属性,即。当类属性不存在时,添加类属性,即。

m0_58838332的博客 417

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Python的静态方法、类方法、属性方法和魔法方法 - 邱乘屹的个人技术博客

Python的静态方法、类方法、属性方法和魔法方法静态方法静态方法使用场景调用方式类方法类方法使用场景调用方式属性方法魔法方法 静态方法 静态方法的作用是可以更好的组织代码,防止代码变大后变得比较混乱。静态方法只是名义上归类管理,实际上在静态方法里访问不了类或则实例中的任何属性 静态方法使用场景 1)我们要写一个只在类中运行而不在实例中运行的方法.   2)经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法.   3)比如更改环境变量或者修改其他类的属性等能用到静态方法.   

weixin_47074764的博客 703

python魔法属性_魔法方法和属性

在python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别,同时表示名字有特殊含义,所以绝不要在自己的程序中使用这种名字。在python中,这种名字组成的集合所包含的方法称为魔法(或特殊)方法。如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切的说是根据名字)被python调用。很久以前(Python2.2中),对象的工作方式就有了很大的变化。这种改变产生了一些影响...

weixin_39623050的博客 119
上一篇: Python_【__import__】_ 动态导入模块、类对象或函数
下一篇: Python_多任务:进程、线程、协程
bug捕手
博客等级 码龄4年 899粉丝 417原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值