динамическое связывание метода в python - PullRequest
0 голосов
/ 16 января 2019

У меня есть следующие два класса A и B. Как сделать так, чтобы метод do_someting () вызывал переопределенный метод some_method () в B. Это выполнимо в Python?

class A:
    @staticmethod
    def some_method()
        # pass
        return

    @classmethod
    def do_something():
        A.some_method()
        ...
        return

class B(A):
    @staticmethod
    def some_method()
        # how does do_something call here?
        return

    @classmethod
    def run()
        B.do_something()
        return

1 Ответ

0 голосов
/ 16 января 2019

Это довольно просто, просто исправьте проход двоеточий в self и cls:

class A:
    @staticmethod
    def some_method():
        # pass
        return

    @classmethod
    def do_something(cls):
        cls.some_method()
        return

class B(A):
    @staticmethod
    def some_method():
        print("I did stuff!")
        return

    @classmethod
    def run(cls):
        B.do_something()
        return

k = B()
k.run()
>>>"I did stuff!"

И если вы хотите вызвать старый do_something (тот, что в классе A) из класса B, просто передайте соответствующий класс. В классе B:

@classmethod
def run(cls):
    A.do_something()
    return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...