我希望有一个可以创建子类的类,它具有仅在特定条件下打印的打印功能。
这基本上是我尝试做的事情:
class ClassWithPrintFunctionAndReallyBadName:
...
def print(self, *args):
if self.condition:
print(*args)
除了必须使用默认print
函数明确声明的参数(例如end
(例如:print('Hello, world!', end='')
)之外,这已经有效。如何让我的新课程print
函数接受end=''
等参数并将其传递给默认print
?
答案 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']