班级,构造函数和魔术方法!
#初学者 #教程 #python #oop

句法

让我们首先分析提供的类语法:

class Fraction:
    def __init__(self, f1, f2):
        self.f1 = f1
        self.f2 = f2

现在,让我们解构此语法以实现更深入的理解并提供更详尽的解释:

  • 关键字class用于创建类。
  • 该类的名称是Fraction,它遵守了帕斯卡案命名约定,其中每个化合物在变量中的首字母都大写。
  • 关键字def用于函数的定义。
  • __init__是一种魔术/dunder(“双重下划线”方法的缩写)方法称为构造函数。我们将进一步研究这个概念。
  • 在这种情况下,我们遇到参数self。它的意义将在即将到来的部分中讨论。
  • 参数f1f2象征输入。

在这些术语中,某些术语可能会脱颖而出,例如__init__selfself.f1self.f2

构造函数

让我们通过详细介绍__init__方法来启动解释。此方法称为构造函数,并包含参数self。构造函数的区别是特殊或dunder(双重下划线)方法。

目前,请记住,以两个下划线开始和结论的任何方法都表示为魔术或dunder方法。

方法 ?

一种方法本质上是一个在类中定义的函数,将其与常规function区分开。

  • 那么,是什么设置了__init__方法?

与其他方法不同,只要创建类的实例/对象,此特定方法就会自动执行。换句话说,无需明确呼吁__init__启动其执行;每次班级的对象都存在时,都会调用它。

但是,出现的问题是:我们如何创建对象?

previous blog回想一下数据类型本身就是类。让我们创建list类的object

a = ["this will blow your mind"]
b = list("this will blow your mind")
print(type(a))  # <class 'list'>
print(type(b))  # <class 'list'>

通常,在制作列表时,您可能已经使用了对象文字(对象文字是一种直接在代码中定义和创建对象的句法方法,而无需显式类别定义或构造函数)。

但是,您还可以选择通过使用类名来创建列表或列表对象,如列表b的创建为reference variable中所示。

创建列表ab时,列表类的__init__构造函数将执行

掌握了构造函数的目的,让我们现在深入研究其必要性。

构造函数是初始化类中的变量或属性的主要手段。它提供了明显的灵活性,从而可以自定义其行为以与特定要求保持一致。

例如,在设计代表分数的类的情况下,可以使用__init__方法施加约束,例如防止分母分配为零。<​​/p>。

魔法方法

在Python中,有特殊的方法称为“魔术方法”,它们在其名称的开头和结尾处由它们的双重下划线而区别。

这些方法(通常称为dunder方法)旨在响应特定动作而不是由程序员直接调用。一个说明性的示例是使用 +运算符增加了两个数字,这触发了幕后__add__()方法的调用。

Python的内置类包括各种魔法方法。通过使用dir()函数,您可以探索给定类继承的魔法方法。例如,考虑str类,其中dir()函数有助于与之关联的属性和方法的列表。

a = 1 + 2
print(a)  # 3

执行上述代码时,Python解释了我们正在尝试添加int类的两个对象,即ab。因此,在int类中,它搜索了__add__魔法方法,该方法决定了如何计算这些对象的加法操作。