2024-09-30 06:32:15 发布
网友
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是怎样的
是的,没错
答案是:
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方法
m+n
m.__add__(n)
希望我或多或少是清楚的
是的,没错
答案是:
“添加”的神奇方法正是这样做的
请注意,您有一个只接受两个参数的方法
因此,u实际上是在这里指定这些值:
现在,对于返回,您将获得额外的字符串
为了更好地理解magic方法add,只需删除它并运行代码 你会得到错误
好的,有几件事可以尝试澄清这一点:
1)类别定义
类定义只是从它派生的对象的模板。在这种情况下,类something有两个“特殊”方法:init()和add()
init(self,…)方法在创建对象后立即调用。在这种情况下,当创建类某物的对象时,需要使用一个参数来创建它,该参数将在内部添加到该对象的属性noofpages(self指要创建的对象)
add(self,other)方法将告诉python,如果添加了此类类型的两个实例,该怎么办,其中self指的是调用添加的对象,other指的是同一类的另一个对象
因此,在为类声明模板之后,将创建类的两个对象
这两个对象是类something的不同实例,因此m将其noofpages设置为10,n设置为20。您可以通过调用:
现在我们已经确定,即使m和n是同一类的两个不同实例,我们也可以继续使用add重载
首先,让我们讨论重载加法时的命名约定(它使函数更有意义)。通常代替:
你应该:
因此self指的是调用方法的对象实例,而其他指的是同一类型对象的另一个实例
最后调用
m+n
与调用m.__add__(n)
相同。因此,在加法的最左侧元素上调用add方法希望我或多或少是清楚的
相关问题 更多 >
编程相关推荐