#python
#python
Вопрос:
Я хочу иметь некоторые функции, которые вызываются всякий раз, когда вызывается метод моего объекта. Эти функции не определяются методом — они передаются методу позже (или могут не предоставляться вообще). Есть ли более элегантное решение для заполнения, чем использование:
class MyObj:
def __init__(self):
self.bind = self.donothing #variable that may or may not be set by the parent
def func(self):
"""Function to be called by the parent"""
self.bind()
## do stuff
@staticmethod
def donothing():
pass
Комментарии:
1. Я думаю, вы ищете декораторов. Читайте о них
2. Каков фактический вариант использования? Если вы хотите определить вызов getattr, который по умолчанию используется для вашего бездействия, это вариант, но трудно сказать, в чем проблема, которую вы пытаетесь решить, и, следовательно, какие решения могут быть подходящими.
3. Что не так с этим решением?
Ответ №1:
Вы можете сделать что-то вроде:
class MyObj:
def __init__(self):
self.bind = None
def func(self):
"""Function to be called by the parent"""
if self.bind:
self.bind()
## do stuff
def define_function(self, f):
self.bind = f
Функции, как и другие объекты, могут использоваться в качестве параметров методов. Просто инициализируйте свою переменную без значения и присвоите ей значение, используя установщик.
Ответ №2:
Я задал этот вопрос некоторое время назад, не зная ответа. С тех пор я узнал, что ответ будет:
class MyObj:
def __init__(self):
self.bind = lambda *a, **b: ()
def func(self):
"""Function to be called by the parent"""
self.bind()
## do stuff