Python переопределяет метод класса с помощью метода экземпляра - PullRequest
5 голосов
/ 14 февраля 2012

Я столкнулся с ошибкой в ​​моем коде, когда скрытый метод был скрыт, потому что я забыл декоратор @classmethod.Я бродил, если можно заставить другой путь (отметил, что это, вероятно, плохой дизайн), но что-то вроде:

 class Super:

   @classmethod
   def do_something(cls):
     ...

class Child:
  def do_something(self):
    ...

obj = Child()
obj.do_something() #calls the child
Child.do_something() #calls the Super method

РЕДАКТИРОВАТЬ: Нет конкретного случая на данный момент, но я бродил, если это может быть сделано гипотетически.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

В качестве чисто гипотетического приложения это может быть один из способов:

class Super:
   @classmethod
   def do_something(cls):
     print('Super doing something')

class Child(Super):
    def __init__(self):
        self.do_something = lambda: print('Child Doing Something')

Пример:

>>> obj = Child()
>>> obj.do_something()
Child Doing Something
>>> Child.do_something()
Super doing something
>>> obj.do_something()
Child Doing Something
1 голос
/ 14 февраля 2012

Вы можете переопределить метод класса с помощью другого метода класса, который принимает экземпляр этого класса в качестве аргумента. В этом методе сделайте то, что вам нужно сделать, а затем верните его. Таким образом, вы могли бы сделать

instance = Child.do_something(instance)

Однако я не рекомендую делать это вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...