【问题标题】:Calling @classmethod's super, which calls another classmethod调用@classmethod 的super,它调用另一个classmethod
【发布时间】:2019-11-08 05:29:29
【问题描述】:

在这里找不到答案,所以发布这个。 收到此错误:

main() takes 1 positional argument but 2 were given

对于这段代码,B 尝试扩展 A 的方法,该方法调用了一个额外的类方法。

class A:
    @classmethod
    def run(cls):        
        cls.main(cls)

    @classmethod
    def main(cls):
        """Override and set main logic here
        """
        pass


class B(A):        
    title = "Hello"
    @classmethod
    def run(cls, name):
        cls.name = name
        super().run()

    @classmethod
    def main(cls, *args):
        """Override and set main logic here
        """
        print(cls.title, cls.name)

B.run('Bob')   # Hello Bob

【问题讨论】:

    标签: python-3.x super superclass class-method


    【解决方案1】:

    super() 通过:

    (<class '__main__.B'>, <class '__main__.B'>)
    

    A.run() 调用它时进入B.main(): 可以让B 只通过收集任何额外的位置参数来处理额外的参数:

    def main(cls, *args):
    

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 2021-12-29
      • 2013-02-23
      • 2018-04-15
      • 2021-08-14
      • 2022-08-03
      • 2017-04-17
      • 2019-08-14
      相关资源
      最近更新 更多