我无法理解以下代码中发生了什么…#方法重载

2024-09-30 06:32:15 发布

您现在位置:Python中文网/ 问答频道 /正文

class something:

    def __init__(self, pages):
        self.noofpages=pages

    def __add__(self,b):
        return str(self.noofpages + b.noofpages)+'hii'

m=something(10)
n=something(20)
print(m+n)

输出:-30hii

10到self.noofpages和20到b.noofpages是怎样的


Tags: selfaddreturninitdefpagessomethingclass
2条回答

是的,没错

答案是:

30hii

“添加”的神奇方法正是这样做的

请注意,您有一个只接受两个参数的方法

First Argument is self
Second Argument is b

因此,u实际上是在这里指定这些值:

self.noofpages = m = 20
b.noofpages = n = 10

现在,对于返回,您将获得额外的字符串

return str(self.noofpages + b.noofpages)+'hii' = m + n + "hii"
== 20 + 10 + "hii" == 30hii

为了更好地理解magic方法add,只需删除它并运行代码 你会得到错误

好的,有几件事可以尝试澄清这一点:

1)类别定义

类定义只是从它派生的对象的模板。在这种情况下,类something有两个“特殊”方法:init()和add()

init(self,…)方法在创建对象后立即调用。在这种情况下,当创建类某物的对象时,需要使用一个参数来创建它,该参数将在内部添加到该对象的属性noofpages(self指要创建的对象)

add(self,other)方法将告诉python,如果添加了此类类型的两个实例,该怎么办,其中self指的是调用添加的对象,other指的是同一类的另一个对象

因此,在为类声明模板之后,将创建类的两个对象

m=something(10)
n=something(20)

这两个对象是类something的不同实例,因此m将其noofpages设置为10,n设置为20。您可以通过调用:

print(m.noofpages)
print(n.noofpages)

现在我们已经确定,即使m和n是同一类的两个不同实例,我们也可以继续使用add重载

首先,让我们讨论重载加法时的命名约定(它使函数更有意义)。通常代替:

def __add__(self,b):
     return str(self.noofpages + b.noofpages)+'hii'

你应该:

def __add__(self,other):
    return str(self.noofpages+other.noofpages)+'hii'

因此self指的是调用方法的对象实例,而其他指的是同一类型对象的另一个实例

最后调用m+n与调用m.__add__(n)相同。因此,在加法的最左侧元素上调用add方法

希望我或多或少是清楚的

相关问题 更多 >

    热门问题