【发布时间】:2019-03-28 05:29:00
【问题描述】:
我想为类方法提供合理的默认参数作为类变量。这些变量应该在调用它们时传递给类方法,除非用户想要覆盖它们。我想出了下面的解决方案,但我不确定这是否有意义。它做我想做的事,但我很想知道是否有更好或更 Pythonic 的方法来做到这一点。
from copy import deepcopy
class Cat:
def __init__(self):
self.parameters = {'meow': {'volume': 10.2,
'pitch': 'E'},
'sleep': {'duration': 100,
'snore': True,
'dream': True}}
def meow(self, **kwargs):
params = self._set_parameters('meow', kwargs)
print('Meowing at {volume} dB in {pitch}'.format(**params))
def sleep(self, **kwargs):
params = self._set_parameters('sleep', kwargs)
print('Sleeping for {duration} hours...\n'
'Snore: {snore}\nDream: {dream}'.format(**params))
def _set_parameters(self, action, kwargs):
params = deepcopy(self.parameters[action])
for key in kwargs:
if key in params:
params[key] = kwargs[key]
return params
这里调用类方法时如果使用默认值则不带任何参数。
Sleepycat = Cat()
Sleepycat.sleep()
>>> Sleeping for 100 hours...
Snore: True
Dream: True
用户还可以提供一个关键字参数来覆盖默认值:
Loudcat = Cat()
Loudcat.meow(volume=100)
>>> Meowing at 100 dB in E
【问题讨论】:
标签: python class keyword-argument