【问题标题】:Multiple inheritance ,what is the function of * args多重继承,*args的作用是什么
【发布时间】:2021-03-23 05:34:35
【问题描述】:
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())

【问题讨论】:

标签: python-3.x


【解决方案1】:

在功能失调的第一个程序中,您似乎希望 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):

【讨论】:

    【解决方案2】:

    我给你解释一下在任何函数中使用 *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 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2022-09-22
      相关资源
      最近更新 更多