多重继承,*args的函数是什么


class Base1:
def  __init__(self,a):
self.a=a
def  addition(self):
return self.a + self.a
class Base2:
def  __init__(self,b):
self.b=b
def  multipl(self):      
return self.b*self.b
class Sub(Base1,Base2):
def  __init__(self,a,b):
super().__init__(a,b)

H=Sub(4,5)
print(H.addition())
print(H.multipl())

TypeError:init((接受2个位置参数,但有3个给定了

好吧,当我这样做的时候,我所期望的会发生,为什么?什么是"*args";如何避免那个错误?

class Base1:
def  __init__(self,a,*args):
super().__init__(*args)
self.a=a

def  addition(self):
return self.a + self.a
class Base2:
def  __init__(self,b,*args):
super().__init__(*args)
self.b=b

def  multipl(self):      
return self.b*self.b
class Sub(Base1,Base2):
def  __init__(self,a,b):
super().__init__(a,b)

H=Sub(4,5)
print(H.addition())
print(H.multipl())

在功能失调的第一个程序中,您似乎希望Sub.__init__super().__init__(a,b)同时调用Base1和Base2的__init__,并神奇地将a分配给前者,将b分配给后者,但事实并非如此;实际上,只有Base1.__init__是用隐式self和另外两个参数ab调用的,这使得错误消息正确地抱怨的三个参数__init__((采用了2个位置参数,但给出了3个
Base1到def __init__(self,a,*args):的更改捕获了*args中的第三个参数b,因此不再有多余的参数;你还不如def __init__(self, a, b):

让我向您解释在任何函数中使用*args的基本目的,我希望它能帮助您理解*args在函数中的用途:

让一个函数:

def total(a,b):
return a+b
print(total(1,2,3,4))

它会给你以下错误:

Traceback (most recent call last):
File "stack.py", line 3, in <module>
print(total(1,2,3,4))
TypeError: total() takes 2 positional arguments but 4 were given

这是因为我们在函数"total"中定义了两个参数,但在调用函数时传递了4个参数,请记住,我们不能传递超过两个参数。因此,为了解决这个问题,我们使用*args,它表示函数中将传递n个参数。使用*args的相同函数如下:

def all_total(*args):
total = 0
for i in args:
total+=i
return total
print(all_total(1,2,3,4,5,5))

它将输出20。它表明,现在我们可以在任何函数中传递任何数量的参数,而不会出现任何错误,这就是*args的神奇之处。在您的案例中,init函数也是如此。

我希望它能帮助你,欢迎使用python:(

最新更新