句法
让我们首先分析提供的类语法:
class Fraction:
def __init__(self, f1, f2):
self.f1 = f1
self.f2 = f2
现在,让我们解构此语法以实现更深入的理解并提供更详尽的解释:
- 关键字
class
用于创建类。 - 该类的名称是
Fraction
,它遵守了帕斯卡案命名约定,其中每个化合物在变量中的首字母都大写。 - 关键字
def
用于函数的定义。 -
__init__
是一种魔术/dunder(“双重下划线”方法的缩写)方法称为构造函数。我们将进一步研究这个概念。 - 在这种情况下,我们遇到参数
self
。它的意义将在即将到来的部分中讨论。 - 参数
f1
和f2
象征输入。
在这些术语中,某些术语可能会脱颖而出,例如__init__
,self
,self.f1
和self.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
中所示。
创建列表a
和b
时,列表类的__init__
构造函数将执行
掌握了构造函数的目的,让我们现在深入研究其必要性。
构造函数是初始化类中的变量或属性的主要手段。它提供了明显的灵活性,从而可以自定义其行为以与特定要求保持一致。
例如,在设计代表分数的类的情况下,可以使用__init__
方法施加约束,例如防止分母分配为零。</p>。
魔法方法
在Python中,有特殊的方法称为“魔术方法”,它们在其名称的开头和结尾处由它们的双重下划线而区别。
这些方法(通常称为dunder方法)旨在响应特定动作而不是由程序员直接调用。一个说明性的示例是使用 +运算符增加了两个数字,这触发了幕后__add__()
方法的调用。
Python的内置类包括各种魔法方法。通过使用dir()
函数,您可以探索给定类继承的魔法方法。例如,考虑str
类,其中dir()
函数有助于与之关联的属性和方法的列表。
a = 1 + 2
print(a) # 3
执行上述代码时,Python解释了我们正在尝试添加int
类的两个对象,即a
和b
。因此,在int
类中,它搜索了__add__
魔法方法,该方法决定了如何计算这些对象的加法操作。