Python 魔术方法2025 年 8 月 28 日 | 阅读 6 分钟 为了为我们创建的类添加“魔术”,我们可以定义称为“魔术方法”的特殊方法。例如,魔术方法 __init__ 和 __str__ 总是由两边的双下划线包裹。通过让我们能够访问 Python 的内置语法工具,魔术方法可以改善我们类的结构。 我们可以将 Python 的内置类与我们自己的类集成。从内置类继承的类称为子类。子类可以访问父类的所有属性,包括其方法。通过利用基本的内置功能,我们可以使用魔术方法自定义我们类的一些任务。 __init__ 方法在我们构造类的实例之后,但在该实例返回给类的调用者之前,_init_ 方法会被执行。当我们创建类的实例时,它会自动调用,就像 C++、Java、C#、PHP 等流行编程语言中的构造函数一样。这些方法在 _new_ 之后调用,因此被称为初始化。我们应该在这里定义实例参数。 代码 输出 Now called __init__ magic method, after tha initialised parameters <__main__.methods object at 0x3701290> Name, standard, and marks of the student is: Itika 11 98 __new__() 方法魔术方法 __new__() 由 __init__() 方法隐式调用。__new__() 方法返回的新实例被初始化。要修改用户定义类中对象的创建,我们必须提供 __new__() 魔术方法的修改实现。我们需要提供第一个参数作为要创建其对象的类的引用,用于此静态函数。 代码 输出 Creating an instance by __new__ method Init method is called here <__main__.Method at 0x30dfb88> __add__ 方法我们使用魔术方法 __add__ 来添加类实例的属性。考虑以下场景:对象 object1 属于类 Method,对象 object2 属于类 Method 1,两者都有一个名为“attribute”的相同属性,该属性存储在创建实例时传递给类的任何值。如果指定添加属性,当操作 object1 + object2 完成时,__add__ 函数会隐式添加实例的相同属性,例如 object1.attribute + object2.attribute。 下面是代码,展示了我们如何在不使用 __add__ 魔术方法的情况下添加两个不同类的两个实例的两个属性。 代码 输出 Attribute 27 27 Attribute By using __add__ magic method the code changes to this. 代码 输出 <__main__.Method object at 0x37470f0> <__main__.Method_2 object at 0x376beb8> 27 Attribute 上面脚本中的类 Method 和 Method_1 有一个名为“attribute”的属性,它存储一个字符串。我们创建了两个实例 instance_1 和 instances_2,其对应的属性值为“ Attribute”和“ 27”。__add__ 方法用于将操作 instance_1 + instance_2 转换为 instance_1 + instance_2.attribute,从而产生输出(27 Attribute)。 __repr__ 方法__repr__ 魔术方法使用字符串表示类实例。每当我们尝试打印该类的对象时,__repr__ 方法会自动调用,并在输出中生成一个字符串。 代码 输出 Following are the values of the attributes of the class Method: x = 4 y = 6 z = 2 __contains__ 方法Python 的“in”成员运算符隐式调用 __contains__ 方法。我们可以使用 __contains__ 方法来确定一个元素是否包含在对象的属性中。我们可以将此方法用于容器(例如列表、元组等)属性。 代码 输出 4 is contained in attribute: True 5 is contained in attribute: False 在上面的程序中,我们使用了 __contains__ 魔术方法来确定给定整数是否包含在属性“attribute”中。在这种情况下,“attribute”是一个整数列表。整数 4 存在于作为属性传递给类 Method 的给定整数列表中。而 5 不存在于列表中。 __call__ 方法当类实例被调用时,Python 解释器会调用魔术方法 __call__。我们可以利用 __call__ 方法使用实例名称显式调用操作,而不是创建额外的方法来执行特定活动。 代码 输出 7 35 __iter__ 方法对于给定实例,使用 __iter__ 方法提供一个生成器对象。为了利用 __iter__ 方法,我们可以利用 iter() 和 next() 方法。 代码 输出 9 16 25 36 49 64 我们已经在代码中计算了数字的平方。对于给定范围内的数字,在上面的程序中计算平方(开始和停止)。当我们调用函数 iter(Method(3, 8)) 时,会调用 __iter__ 方法,该方法生成给定范围内数字的平方。在我们的示例中,我们使用 3 到 8 的范围;因此,调用 next() 方法将产生结果 9、16、25、36、49、64。 下一主题Python 堆栈和队列 |
我们请求您订阅我们的新闻通讯以获取最新更新。