Вызов суперкласса @ classmethod, который вызывает другой метод classmethod - PullRequest
0 голосов
/ 26 июня 2019

Не удалось найти ответ здесь, поэтому публикуем это. Получал эту ошибку:

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

1 Ответ

0 голосов
/ 26 июня 2019

super() проходит:

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

в B.main(), когда A.run() вызывает его: Может заставить B обрабатывать дополнительный параметр, просто собирая любые дополнительные позиционные аргументы:

def main(cls, *args):
...