将函数的所有参数传递给另一个函数

时间:2017-02-28 03:29:16

标签: python

我希望有一个可以创建子类的类,它具有仅在特定条件下打印的打印功能。

这基本上是我尝试做的事情:

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

除了必须使用默认print函数明确声明的参数(例如end(例如:print('Hello, world!', end=''))之外,这已经有效。如何让我的新课程print函数接受end=''等参数并将其传递给默认print

5 个答案:

答案 0 :(得分:9)

传递所有参数的标准方法是@JohnColeman在评论中建议:

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

args是非关键字(位置)参数的元组,kwargs是关键字参数的字典。

答案 1 :(得分:1)

像这样添加

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

如果参数是动态的或太多:

 def print(self, *args, **kwargs):

答案 2 :(得分:1)

如果您使用大量关键字参数并且只想为另一种方法构建外观,我知道它看起来有点难看,但是效果很好。

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'})

尽管有很多样板,但可以避免参数语句的重复。

您可能还会考虑使用装饰器来使条件部分变得更pythonic。但是请注意,装饰器会在类实例化之前检查条件。

答案 3 :(得分:0)

只需复制方法签名的命名参数。

def print(self, *args, end='\n', sep=' ', flush=False, file=None):
    if self.condition:
        print(*args, end=end, sep=sep, flush=flush, file=file)

答案 4 :(得分:0)

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']