如何将类方法的默认参数设置为类变量?

问题描述 投票:0回答:1

我想将类方法的合理默认参数作为类变量。除非用户想要覆盖它们,否则应在调用它们时将这些变量传递给类方法。我想出了下面的解决方案,但我不确定这是否有意义。它做我想做的事情,但我很想知道是否有更好或更多的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 kwargs
1个回答
0
投票

这个怎么样

class Cat:
    def __init__(self):
         self.sleep_duration = 100
         self.sleep_snore = True
         self.sleep_dream = True

    def sleep(self, 
              duration=100, 
              snore=True, 
              dream=True):
        self.sleep_duration = duration
        self.sleep_snore = snore
        self.sleep_dream = dream

        print('Sleeping for {0} hours...\n'
              'Snore: {1}\nDream: {2}'.format(
                self.sleep_duration, self.sleep_snore, self.sleep_dream))
© www.soinside.com 2019 - 2024. All rights reserved.