[Python] Is it possible to make a pointer with forced parameter values?

Discussão em 'Python' iniciado por Stack, Janeiro 20, 2025.

  1. Stack

    Stack Membro Participativo

    Consider this ServicesManager class that handles some services (basically, a function identified by a name):

    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)


    This is a MCVE, to help asking my question. ServicesManager is actually a ROS Node class. It cannot be modified to find an answer to my question.

    Here is a class using ServicesManager with an example of usage:

    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")


    The service_foo and service_bar # do something part has very common piece of code that I would like to factorize, I'd like an object to be passed to a generic function. The code would look like this:

    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)


    Is there a way to do this? What would be the good syntax for calling add_service? May a lambda help?

    Continue reading...

Compartilhe esta Página