Python中的方法解析顺序在本教程中,我们将学习方法解析顺序,也称为MRO。它是Python继承的一个基本概念。 方法解析顺序描述类的搜索路径Python用于在包含多继承的类中获取适当的方法。 介绍如我们所知,被继承的类称为子类或父类,而继承的类称为子类或子类。在多重继承中,一个类可以由许多函数组成,因此使用方法解析顺序技术来搜索基类执行的顺序。 简单地说—“在当前类中搜索方法或属性,如果方法不在当前类中,则搜索移动到父类,依此类推”。这是一个深度优先搜索的例子。 它在多重继承中起着至关重要的作用,在多重继承中可以在多个超类中找到相同的方法。 为了更好地理解它,让我们看看如何使用它。 的例子, 输出: 我是C班的 解释, 上面的代码中有一个多重继承。我们定义了三个类,分别是A、B和C,这些类都有相同的命名方法的名字()。我们创建了一个对象类C。对象调用了类C,而不是类,而类C继承了类A的方法。 以上代码所遵循的顺序是B类- > A类。这种技术被称为MRO(方法解析顺序)。 让我们来理解另一个多重继承的例子。 的例子, 输出: 我是B班的 解释, 在上面的代码中,我们创建了另一个没有定义继承B类和C类的类属性的D类。当我们调用该方法时的名字(),它进入D类,寻找的名字()函数。但是D类没有任何声明。因此,搜索转移到类B,得到的名字()函数,并返回结果。搜索将按如下步骤进行。 如果类B没有方法,它将调用类C的方法。 在这里,我们建议您删除B类方法并检查会发生什么。通过这样做,您将了解方法解析是如何工作的。 新旧秩序在旧版本的Python(2.1)中,我们被限制使用旧的类butPython(2.2 & continue),我们可以使用新的类。默认情况下,Python 3具有原始(新)类。新样式类的第一个父类继承自Python根'object'类。让我们看看下面的例子 的例子, 这两个类的声明风格是不同的。在方法解析中,旧式类遵循深度优先的从左到右算法(DLR),而新式类在执行多重继承时使用C3线性化算法。 DLR算法Python在实现类之间的多重继承时创建了一个类列表。该列表用于确定实例调用哪个方法时必须调用哪个方法。 我们可以假设按照它的名字来工作,方法解析将首先搜索深度,然后从左到右搜索。下面是示例。 的例子, 首先,算法将在实例类中搜索被调用的方法。如果没有找到,就进入第一个父级,如果也没有找到。它将查看父节点的父节点。这将一直持续到继承类结束。 在上面的示例中,方法解析顺序将是- 但是A不能两次出现 这个算法显示了当时奇怪的行为。让我们看看下面的例子。 的例子, 根据DLR算法,顺序将是E, C, D, B, A。在C类中有A类和B类的互换,这是非常模糊的。这意味着该算法不保持单调性。 Samuele Perdoni是第一个发现MRO算法不一致的人。 C3线性化算法C3线性化算法是DLR算法的一个更好的版本,因为它消除了不一致性。该算法有一些限制,如下所示。
C3线性化算法的规则
方法解析类的方法Python提供了两种方法来获取类的方法解析顺序__mro__属性或mro ()方法。在这些方法的帮助下,我们可以显示它们被解析的方法顺序。 让我们来理解下面的例子。 的例子, 输出: (<类的__main__。D'>, 正如我们在上面的输出中看到的,我们得到了方法解析顺序的顺序。这样,C3线性化算法适用于多重继承。
下一个话题
猴子在Python中的补丁
|