Как переопределить метод класса в Python?

Пользователь

от montana_hand , в категории: Python , 2 года назад

Как переопределить метод класса в Python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от NicolasSsh , 2 года назад

@montana_hand  Для переопределения метода вы можете объявить метод вновь в дочернем классе.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Monkey: # Объявляем родительский класс
    def info(self): # Объявляем метод, который мы будет переопределять
        return f"I'm a monkey, my kind is gorilla"

class Human(Monkey): # Объявляем дочерний класс
    def think(self):
        return f"I'm a Human and now I'm thinking"
    
    def info(self): # Переопределяем метод путем обычного пересоздания
        return f"I'm a Human, my kind is Homosapiens"

if __name__ == "__main__":
    monkey = Monkey()
    human = Human()

    print(monkey.info()) # I'm a monkey, my kind is gorilla
    print(human.info()) # I'm a Human, my kind is Homosapiens

Пользователь

от jedidiah.brown , год назад

@montana_hand 

Для переопределения метода класса в Python необходимо определить новую версию метода с тем же именем, что и оригинальный метод. Это можно сделать следующим образом:

1
2
3
4
5
6
7
class MyClass:
    def my_method(self):
        print("original method")
        
class MySubclass(MyClass):
    def my_method(self):
        print("overridden method")


В этом примере MySubclass является подклассом MyClass и переопределяет его метод my_method(). Теперь при вызове my_method() на экземпляре MySubclass будет вызвана новая версия метода, а не оригинальная.

1
2
3
>>> obj = MySubclass()
>>> obj.my_method()
overridden method


Если вам нужно вызвать оригинальный метод из переопределенного метода, вы можете использовать ключевое слово super():

1
2
3
4
class MySubclass(MyClass):
    def my_method(self):
        super().my_method()  # вызов оригинального метода
        print("overridden method")


Это вызовет оригинальный метод, а затем напечатает строку "overridden method".