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

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日

相关文章

  • 详解使用Python将文件从jpg转换成gif

    将文件从jpg转换成gif需要使用Python中的Pillow库,下面是具体步骤: 步骤一:安装Pillow库 在命令行中输入以下命令即可安装: pip install Pillow 步骤二:编写Python脚本 在Python脚本中,我们需要使用Pillow库中的Image模块。以下是一个简单的示例代码: import os from PIL import…

    python-answer 2023年3月25日
    00
  • 使用python3.0 对接美团接口的实现示例

    下面就让我把使用 Python 3.0 对接美团接口的实现示例的完整攻略分享给您。 一、准备工作 在美团开发平台注册开发者账号并创建应用。 根据接口文档和开发文档了解需要调用的接口详情,并获取 App Key 以及 App Secret。 二、安装 Requests 库 打开终端(terminal),输入以下命令行并回车: pip install reque…

    python 2023年6月3日
    00
  • Python函数的参数列表解析

    Python函数的参数列表解析是一种为函数声明提供灵活性的技巧,它允许我们在函数声明中使用一个特殊的语法,使得函数参数在传入时可以被解析为多个可选项,从而提供更多的灵活性。 参数列表解析的基本语法 参数列表解析的基本语法是在函数声明中使用*args(星号表示任意数量)和**kwargs(两个星号表示关键字参数)这两个特殊参数,来接收任意数量的位置参数和关键字…

    python 2023年6月5日
    00
  • Windows 7下Python Web环境搭建图文教程

    Windows7下PythonWeb环境搭建图文教程 这是一篇针对Windows7系统下,搭建PythonWeb环境的教程,包含了Python环境的安装、虚拟环境的搭建以及Web框架的选择和安装等内容。 Python环境的安装 在官网(https://www.python.org/downloads/windows/)下载Python的安装包进行安装。安装完…

    python 2023年5月14日
    00
  • Python二进制转化为十进制数学算法详解

    以下是关于“Python二进制转化为十进制数学算法详解”的完整攻略: 简介 二进制和十进制是常见的数字表示方法,其中二进制是计算机中最基本的数字表示方法。在本教程中,我们将介绍如何使用Python实现二进制转化为十进制的数学算法,包括使用位运算和使用Python内置函数。 使用位运算 位运算是一种基本的计算机运算,它可以用于二进制转化为十进制。我们可以使用位…

    python 2023年5月14日
    00
  • python排序算法之选择排序

    以下是关于“Python排序算法之选择排序”的完整攻略: 简介 选择排序是一种简单的排序算法,它的基本思想是每次从未排序的元素中选择最小的元素,将其放到已排序的元素末尾。在本教程中,我们将介绍如何使用Python实现选择排序,并提供一些示例说明。 Python选择排序实现 以下是使用Python实现选择排序的示例: def selection_sort(ar…

    python 2023年5月14日
    00
  • Django打印出在数据库中执行的语句问题

    一、简介 Django提供了一个非常好用的ORM,可以方便的操作数据库,但是有时候我们需要查看ORM生成的SQL语句,以便优化ORM的使用。本攻略将详细介绍如何在Django中打印执行的SQL语句。 二、打印SQL语句的方法 在Django中,打印出在数据库中执行的SQL语句非常简单,我们只需要在settings.py中设置DEBUG=True,然后在执行O…

    python 2023年5月13日
    00
  • 跟老齐学Python之集合(set)

    跟老齐学Python之集合(set) 集合(set)是Python中的一种数据类型,它是由一组无序且不重复的元素组成。本文将介绍集合(set)的基本概念、创建、添加、删除、操作等方面的内容,并提供两个示例说明。 集合(set)的基本概念 集合(set)是由一组无序且不重复的元素组成的数据类型。集合中的元素必须是不可变的,例如数字、字符串、元组等。集合是变的,…

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