#python #python-3.x #oop
Вопрос:
Возможно, это немного странно, но я хочу передать вызываемый метод экземпляра в качестве переменной по умолчанию методу экземпляра того же класса.
from typing import Callable
class Person:
def __init__(self, name):
self.name = name
def say_hi(self):
print("Hello, my name is", self.name)
def greet(self, func: Callable=say_hi):
func()
p = Person("Guido")
p.greet()
С помощью приведенного выше решения self
не передается методу экземпляра.
Замена func: Callable=say_hi
на func: Callable=self.say_hi
и self
еще не определена.
Комментарии:
1. если вы знаете, что это метод экземпляра? почему ты его передаешь? Вы можете получить доступ к нему внутри , например
self.say_hi
, если вы все еще настаиваете, то вы можете d0p.greet(p.say_hi)
Ответ №1:
Вы можете выполнить назначение в самой функции:
def greet(self, func: Callable = None):
func = self.say_hi if func is None else func
func()
Предложение @blhsing
в комментариях ниже состоит в том, чтобы использовать это (хотя быть явным немного лучше, чем неявным, но это тоже сработает).:
func = func or self.say_hi
Комментарии:
1. Или
func = func or self.say_hi
, если вам нравится, короче. (Жаль, что в Python нет эквивалента||=
оператора Ruby.)