Можно ли сделать указатель с обязательными значениями параметров?Python

Программы на Python
Ответить
Anonymous
 Можно ли сделать указатель с обязательными значениями параметров?

Сообщение Anonymous »

Рассмотрим этот класс ServicesManager, который обрабатывает некоторые службы (по сути, функцию, идентифицируемую именем):

Код: Выделить всё

class ServicesManager:
def __init__(self):
self.services = dict()

def add_service(self,name,func):
self.services[name] = func

def call_service(self,name):
self.services[name](name)
Это MCVE, чтобы помочь задать мой вопрос. ServicesManager на самом деле является классом узла ROS. Его невозможно изменить, чтобы найти ответ на мой вопрос.
Вот класс, использующий ServicesManager, с примером использования:

Код: Выделить всё

class B(ServicesManager):
def __init__(self):
super(B, self).__init__()
self.add_service("foo",self.service_foo)
self.add_service("bar",self.service_bar)

def service_foo(self,name):
# do something
print(name)

def service_bar(self,name):
# do something
print(name)

b = B()
b.call_service("foo")
b.call_service("bar")
Служебные_foo и service_bar # делают что-то имеют очень общий фрагмент кода, который я хотел бы факторизовать, мне нужен объект для передачи в общую функцию. Код будет выглядеть следующим образом:

Код: Выделить всё

class B(ServicesManager):

class helper_object_foo():
def func1(self,name):
pass
def func2(self):
pass

class helper_object_bar():
def func1(self,name):
pass
def func2(self):
pass

def __init__(self):
super(B, self).__init__()
#self.add_service("foo",self.service_foo)
#self.add_service("bar",self.service_bar)
# How to call add_service???
self.add_service("foo",?? self.service_generic_func using helper_object_foo())
self.add_service("bar",?? self.service_generic_func using helper_object_bar())

def service_generic_func(self,name,helper_object):
helper_object.func1(name)
helper_object.func2()
print(name)
Есть ли способ сделать это? Какой синтаксис лучше всего использовать для вызова add_service? Может ли лямбда помочь?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ter-values
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»