Python新姿势:用魔方方法玩转对象

周边任选+年卡加赠!下单送Coding Plan 卫衣/双肩包/T恤/羽绒服任选,赠CSDN会员年卡+Coding Plan,学习装备一起拿下! 阅读详情

Python中魔法方法(magic method)其实就是那些被双下划线包围的方法,比如__init____str__ 等等。

这些魔法方法添加了魔力,让我们可以在面向对象编程中用更加简洁的代码来操作对象。
本文根据面向对象编程的一些场景来介绍常用的魔法方法

文末领取Python全套最新学习资源

1. 对象构建

为了初始化对象,我们常常在对象中定义一个__init__方法,比如:

class Student(object):
    """
    学生信息
    """
    def __init__(self, name):
        print("[__init__] Student 初始化...")
        self.name = name

# 创建对象
stu = Student("小明")

# 运行结果
[__init__] Student 初始化...

当我们创建对象时,会自动调用魔法方法__init__去初始化属性。

__init__对应的是__del__,它会在对象失效的调用,
我们可以在__del__方法中清理对象Student占用的资源。

class Student(object):
    def __init__(self, name):
        print("[__init__] 初始化 Student...")
        self.name = name

    def __del__(self):
        print("[__del__] 清理 Student...")

def foo():
    print("进入 foo 函数...")
    stu = Student("小明")
    print("离开 foo 函数...")

foo()

# 运行结果
进入 foo 函数...
[__init__] 初始化 Student...
离开 foo 函数...
[__del__] 清理 Student...

进入 foo 函数后创建对象,离开后,自动清理对象。

2. 对象属性访问

python的对象是可以直接访问属性的,但是访问不存在的属性时,会抛出异常。

class Student(object):
    def __init__(self, name):
        print("[__init__] 初始化 Student...")
        self.name = name

stu = Student("小明")
print(stu.name)
print(stu.fullname)

# 运行结果
[__init__] 初始化 Student...
小明

AttributeError: 'Student' object has no attribute 'fullname'

如果不想抛出异常,从而影响程序的其他部分的运行,
这里可以用魔法方法 __getattr__来控制访问了不存在的属性时的行为。
比如,下面的示例中,访问不存在的属性时,返回False,不抛出异常。

class Student(object):
    def __init__(self, name):
        print("[__init__] 初始化 Student...")
        self.name = name

    def __getattr__(self, attr):
        print("[__getattr__] 访问了 Student 不存在的属性 {}".format(attr))
        return
Python 魔法方法 Python中的魔法方法(Magic Methods),也称为双下划线方法(Dunder Methods),是特殊方法,其名称以双下划线开头和结尾,例如__init__、__str__、__add__等。这些方法提供了一种使Python对象能够使用内置函数和语言结构的方式。 阅读详情

相关推荐

Python练手项目:玩转三阶魔方

三阶魔方自动还原

liujava56的专栏 1656

python之有关魔方方法的内容

__new__决定是否要使用该__init__方法,因为__new__可以调用其他类的构造方法或直接返回别的实例对象来作为本类的实例,,这些方法在类或对象进行特定的操作时会被自动调用,我们可以使用或重写这些魔方方法,给自定义的类添加各种特殊的功能来满足自己的需求。init()方法很容易被认为是在实例化对象时,调用的第一个方法,但其实不是,当我们实例化一个对象的时候,()方法是我们最常见的魔方方法,可以用此方法定义一个对象的初始化操作。,__new__主要是用于继承一个不可变的类型,例如元组或者字符串。...

m0_64365419的博客 1213

Python姿势】——用魔方方法玩转对象

Python的魔法方法很多,本文只是列举了其中很少的一部分, 欢迎大神评论留言补充!

xiaolinyui的博客 892

python中实现魔方求解算法

python中解决魔方时,可以使用各种算法和方法。一种流行的算法是 Korf's Cubes 求解算法。下面,我们尝试使用三种方法来求解korf魔方

猫窝 1238

python面向对象编程:魔方法和内置属性

方法会无条件地被调用以实现对类实例属性的访问,也就是每当尝试访问一个对象的属性时,都会自动调用__getattribute__方法。如果类还定义了__getattr__(),则后者不会被调用,除非__getattribute__() 显式地调用它或是引发了 AttributeError。是一个静态方法,当实例化一个类对象时,最先被调用的是__new__ 方法。通过内置函数 hash() 调用以对哈希集的成员进行操作,如果一个类没有定义__eq__() 方法,那么也不应该定义__hash__() 操作。

IMLiFeLong 691

Python姿势:用魔法方法玩转对象

Python中魔法方法(magic method)其实就是那些被双下划线包围的方法,比如__init____str__等等。这些魔法方法为类添加了**“魔力”,让我们可以在面向对象编程中用更加简洁的代码来操作对象。本篇根据面向对象编程的一些场景来介绍常用的魔法方法**。Python的魔法方法很多,本文只是列举了其中很少的一部分,github上有一个示例python

2301_80240808的博客 1072

OpenCV-Python——第36章:姿势估计

目录 1 基础 2 渲染一个立方体 1 基础 在上一节的摄像机标定中,我们已经得到了摄像机矩阵,畸变系数等。有了这些信息我们就可以估计图像中图案的姿势,比如目标对象是如何摆放,如 何旋转等。对一个平面对象来说,我们可以假设 Z=0,这样问题就转化成摄像 机在空间中是如何摆放(然后拍摄)的。所以,如果我们知道对象在空间中的 姿势,我们就可以在图像中绘制一些 2D 的线条来产生 3D 的效果。...

YukinoAI的博客 4721

Python 中使用机器学习进行人体姿势估计

姿态检测是计算机视觉领域的一个活跃研究领域。你可以从字面上找到数百篇研究论文和几个试图解决姿势检测问题的模型。之所以有如此多的机器学习爱好者被姿势估计所吸引,是因为它的应用范围很广,而且实...

深度学习与计算机视觉 5522

计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具

`Mediapipe`是一个开源且强大的Python库,由Google开发和维护。它提供了丰富的工具和功能,用于处理实时多媒体数据。它可以帮助开发者快速构建各种视觉和音频处理应用,并允许他们灵活地定制和扩展库的功能。

侯小啾技术博客 3964

Python 2到Python 3:跨越版本鸿沟,解锁编程姿势

Python 2 中,str类型表示字节串,unicode类型表示字符串。如果要处理非 ASCII 字符,需要将str类型解码为unicode类型。# Python 2示例s = '中文'.decode('utf-8')在 Python 3 中,str类型表示字符串,它是 Unicode 编码的,而bytes类型表示字节串。str和bytes类型不能直接进行操作,需要进行转换。# Python 3示例s = '中文'# Python 3示例。

大雨淅淅的博客 1171

Python基础:None对象与空值判断的正确姿势

本文介绍了Python中None对象的特点与正确使用方式。None是表示"没有值"的单例对象,类型为NoneType,整个Python进程中只有一个None实例。文章对比了None与其他"假值"(如空字符串、空列表、0等)的区别,强调语义上的差异。 关键使用场景包括:函数返回None表示"没有结果"、可选参数默认值、对象属性初始化表示"未设置"、以及标记删除或无效状态。同时指出使用None标记删除的局限性,建议使用专门的哨兵对象替代。正确理解和使用None有助于编写更健壮、语义清晰的Python代码。

输出倒逼输入,写作驱动成长。 7939

Python面向对象之类方法(解锁类操作的姿势

先来看Dog# 显式继承object可以增强代码的可读性和兼容性print(f"狗的数量为:{cls.D_count}")# 实例化后,每次数量加一类方法通过装饰器来定义,其第一个参数约定为cls,代表类本身。在Dog类中,show_count就是类方法,借助cls参数,它可以轻松访问类属性D_count,进而展示狗的数量。

m0_73812383的博客 696

Python姿势 - Python面向对象

《100天精通Python》专栏,最详细的Python入门到精通教程;理论篇基础知识讲解构建体系框架、实践篇Python黑科技学以致用。https://blog.csdn.net/weixin_39032019/category_12263598.html

独木不成林,单弦不成音。 3261

Python开源工具库使用之运动姿势追踪库mediapipe

Mediapipe 是谷歌出品的一种开源框架,旨在为开发者提供一种简单而强大的工具,用于实现各种视觉和感知应用程序。它包括一系列预训练的机器学习模型和用于处理多媒体数据的工具,可以用于姿势估计、手部追踪、人脸检测与跟踪、面部标志、对象检测、图片分割和语言检测等任务。

十十办文武的博客 4043

eNSP中玩转Python自动化——解锁网工姿势(五)

python脚本批量配置路由器OSPF进程建立邻居 python批量路由器OSPF建邻居一、目的二、环境及拓扑1、实验环境2、拓扑三、初始化配置1、Cloud2、路由器3、CRT验证四、python脚本1、IP清单2、python脚本3、执行脚本 一、目的 python脚本批量配置路由器 R1、R2、R3、R4之间同时运行OSPF并且邻居状态为Full 二、环境及拓扑 1、实验环境 python网络自动化环境: 参考前面的文章 2、拓扑 三、初始化配置 1、Cloud 2、路由器 给.

LiBai'S BLOG 1万+

Python实现深蹲姿势分析项目实战

深蹲是一种基本的力量训练动作,它在运动康复、健身和体能训练中占据了举足轻重的地位。在深入探讨如何通过技术手段分析深蹲姿势之前,本章将首先概述深蹲动作的重要性以及正确的深蹲姿势所应遵循的基本原则。正确执行深蹲不仅可以锻炼到大腿、臀部和核心肌群,还能提高整体的力量和协调性。在分析过程中,我们将逐步探讨如何利用现代技术,包括传感器和图像处理技术,以数字化的方式捕捉和分析深蹲动作,以此来优化训练效果并预防运动伤害。本章将为读者提供一个浅显易懂的起点,为接下来更深入的技术分析奠定基础。

weixin_42168902的博客 1025

【GitHub项目推荐--人体姿势识别软件】【转载】

现在有很多场景需要识别人体动作和姿势,比如养老院要监控老人摔倒,比如工地要监控工人的工作情况,有没有突发情况比如行人监控,有没有打架通过跟踪身体关键点进行实时时空局部活动检测github地址ActionAI 是一个 Python 库,用于训练机器学习模型以对人类行为进行分类。ActionAI 是一个 Python 库,用于训练机器学习模型以对人类行为进行分类。实时人体姿势识别技术可以在多种场景中应用,以下是一些主要的应用场景:1.- 视频游戏:玩家可以通过身体动作来控制游戏角色或进行交互。

j8267643的博客 2250

Python生成器:解锁高效编程的姿势

Python生成器是一种强大而灵活的工具,它为我们提供了高效处理数据的方式。通过节省内存、实现惰性计算以及简化代码结构,生成器在各种实际应用场景中都能发挥重要作用。无论是处理大文件、生成无限序列还是构建数据处理流水线,生成器都能让我们的代码更加简洁、高效。掌握生成器的使用方法,无疑将为你的Python编程技能增添一抹亮丽的色彩。希望通过本文的介绍,你能对Python生成器有更深入的理解,并在实际项目中充分发挥它的优势。

xuemenghan的博客 1946

Python姿势 - Python学习笔记——类与对象

《100天精通Python》专栏,最详细的Python入门到精通教程;理论篇基础知识讲解构建体系框架、实践篇Python黑科技学以致用。https://blog.csdn.net/weixin_39032019/category_12263598.html

独木不成林,单弦不成音。 5163
上一篇: 一行python代码,实现文件共享服务器
下一篇: 想要成为一名Python web开发工程师,你需要具体什么技能?
田野猫咪
博客等级 码龄4年 5020粉丝 502原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值