Pass all arguments of a function to another function

前端 未结 5 1539
感动是毒
感动是毒 2021-01-04 06:37

I want to have a class that I can create subclasses of that has a print function that only prints on a particular condition.

Here\'s basically what I\'m trying to do

相关标签:
5条回答
  • class List(list):
        def append_twice(self, *args, **kwargs):
            self.append(*args, **kwargs)
            self.append(*args, **kwargs)
    
    l = List()
    l.append_twice("Hello")
    print(l) # ['Hello', 'Hello']
    
    0 讨论(0)
  • 2021-01-04 07:02

    Just duplicate the named arguments for the method signature.

    def print(self, *args, end='\n', sep=' ', flush=False, file=None):
        if self.condition:
            print(*args, end=end, sep=sep, flush=flush, file=file)
    
    0 讨论(0)
  • 2021-01-04 07:08

    Add at the end like this

    def print(self, *args, end=''):
    

    If the arguments are dynamic or too many:

     def print(self, *args, **kwargs):
    
    0 讨论(0)
  • 2021-01-04 07:20

    I know it looks a bit ugly but works perfectly, if you are using a lot of keyword arguments and only want to build a facade for another method:

    def print(self, print_message, end='\n', sep=' ', flush=False, file=None):
        if self.condition:
            print(**{key: value for key, value in locals().items() if key not in 'self'})
    

    Although it's a lot of boilerplate, it avoids any duplication of parameter statements.

    You might also look into using a decorator to make the conditional part more pythonic. But beware that the decorator checks the condition once prior to the class instantiation.

    0 讨论(0)
  • 2021-01-04 07:21

    The standard way to pass on all arguments is as @JohnColeman suggested in a comment:

    ClassWithPrintFunctionAndReallyBadName:
        ...
        def print(self, *args, **kwargs):
            if self.condition:
                print(*args, **kwargs)
    

    args is a tuple of the non-keyword (positional) arguments, and kwargs is a dictionary of the keyword arguments.

    0 讨论(0)
提交回复
热议问题