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

yizhihongxing

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

什么是魔法属性

在Python中,我们经常会看到以双下划线开头和结尾的属性名,例如__init____str__等,这些属性也被称为魔法属性(Magic Method),因为它们有很强大的魔力,可以实现许多特殊的行为。

魔法属性的作用是用于定义类的特殊行为,我们可以在自定义类中重写这些属性,从而实现自定义的特殊行为。

魔法属性的用法

下面我们将介绍几个常用的魔法属性,并用实例来说明它们的用法。

__init__

__init__是Python类中最常用的魔法属性之一,它被用于在创建对象时对其进行初始化操作,常见的用法如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person("张三", 18)
print(p.name)  # 输出 "张三"
print(p.age)  # 输出 18

在上述代码中,我们定义了一个Person类,并在__init__方法中定义了两个属性nameage,当创建一个Person对象时,会自动调用__init__方法,并传入相应的参数。因此,通过在__init__方法中定义的属性,我们可以方便地对新创建的对象进行初始化。

__str__

__str__是Python类中另一个常用的魔法属性,用于定义当对象被打印时应该如何展示。常见的用法如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"姓名:{self.name},年龄:{self.age}"

p = Person("张三", 18)
print(p)  # 输出 "姓名:张三,年龄:18"

在上述代码中,我们定义了一个Person类,并重写了__str__方法,返回一个字符串表示对象的姓名和年龄。当我们调用print函数输出一个Person对象时,它会自动调用该对象的__str__方法打印出我们定义的字符串。

__getattr__

__getattr__是Python类中另一个非常有用的魔法属性,用于在访问类中不存在的属性时进行自定义的处理。常见的用法如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __getattr__(self, attr):
        if attr == "gender":
            return "未知"
        else:
            raise AttributeError(f"'Person' object has no attribute '{attr}'")

p = Person("张三", 18)
print(p.name)  # 输出 "张三"
print(p.gender)  # 输出 "未知"
print(p.hometown)  # 抛出 "AttributeError: 'Person' object has no attribute 'hometown'"

在上述代码中,我们定义了一个Person类,并重写了__getattr__方法,在该方法中,我们判断如果访问的属性是gender,则返回字符串"未知",否则抛出AttributeError表示该对象不存在该属性。

那么当我们访问gender属性时就会返回我们自定义的值,而当访问其他不存在的属性时就会抛出我们定义的异常。这样我们就可以通过重写__getattr__方法来自定义访问不存在属性时的行为。

总结

通过本文介绍的三个魔法属性:__init____str____getattr__,我们可以发现魔法属性的用途是非常广泛的,而且能够极大地方便我们的开发。在实际应用中,我们还可以根据需要自定义其他的魔法属性,实现我们想要的类的特殊行为。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 类的魔法属性用法实例分析 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • PyQt5使用mimeData实现拖拽事件教程示例解析上

    PyQt5是最流行的Python GUI工具包之一,它允许用户使用Python语言通过简单而有效的方式创建GUI应用程序。其中一个非常常用的功能就是拖拽(drag and drop)操作。在本文中,我们将详细讲解如何使用mimeData来实现拖拽操作,并提供两个示例来演示如何利用mimeData进行拖拽操作。 介绍 拖拽操作(drag and drop)是指…

    python 2023年6月13日
    00
  • Python如何破解压缩包密码

    Python如何破解压缩包密码攻略 简介 在日常使用电脑过程中,经常会遇到需要解压缩密码保护的文件的情况。如果已知密码,解压缩是比较简单的,但如果没有密码,我们可以尝试使用Python编写破解程序来尝试破解密码,提高效率。 原理 破解压缩包的密码一般使用暴力破解的方法,即从密码字典中枚举所有可能的密码,直到找到正确的密码。 常用的破解压缩包密码的Python…

    python 2023年6月3日
    00
  • 利用selenium 3.7和python3添加cookie模拟登陆的实现

    下面是详细讲解如何利用selenium 3.7和python3添加cookie模拟登陆的实现。 1. 安装selenium和ChromeDriver 首先,需要在电脑上安装selenium和ChromeDriver。可以通过以下命令安装selenium: pip3 install selenium ChromeDriver需要和本地Chrome浏览器的版本匹…

    python 2023年6月2日
    00
  • python http接口自动化脚本详解

    Python是一种非常流行的编程语言,可以用于编写HTTP接口自动化脚本。本文将详细讲解Python HTTP接口自动化脚本的详解,包括使用requests库和unittest库两个示例。 使用requests库编写HTTP接口自动化脚本的示例 以下是一个示例,演示如何使用requests库编写HTTP接口自动化脚本: import requests url…

    python 2023年5月15日
    00
  • python利用文件时间批量重命名照片和视频

    我来详细讲解一下“Python利用文件时间批量重命名照片和视频”的完整攻略。 1. 获取文件的创建时间 首先,我们需要获取每个文件的创建时间,可以使用Python自带的os库中的stat()函数来实现,代码如下: import os def get_create_time(file_path): # 获取文件创建时间 create_time = os.sta…

    python 2023年6月3日
    00
  • Python数据结构列表

    Python中的列表是一种常见的数据结构,用于存储一组有序的元素。本文将详细讲解Python中列表的定义、访问、添加、删除、排序和遍历等操作,包括使用索引、切片、append()、insert()、remove()、sort()、reverse()、for循环等。 定义列表 在Python,可以使用方括号 [] 定义一个列表,其中的元素用逗号 , 分隔。下面…

    python 2023年5月13日
    00
  • python如何爬取网页中的文字

    如何使用Python爬取网页中的文字 使用Python爬取网页中的文字需要以下步骤: 导入相关的模块 确定需要爬取的url,并通过requests模块获取相应的网页内容 使用BeautifulSoup模块处理网页内容 将网页内容中的文字提取出来 以下是更详细的解释: 导入相关的模块 在Python中,需要使用到以下三个模块: import requests …

    python 2023年5月14日
    00
  • Python装饰器实现函数运行时间的计算

    Python装饰器实现函数运行时间的计算需要遵循下面的步骤: 1. 编写计时器装饰器函数 我们可以编写一个计时器装饰器函数,用来计算函数运行所花费的时间。 import time def timer(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*arg…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部