我经常读到,检查一个变量是否被定义,在某种程度上是一个糟糕的设计选择。但是,我看不到在类方法中处理可选参数的其他方法。那么,在下面的代码中处理make_sound_twice的可选参数的方式有问题吗?
class Cat(object):
def __init__(self):
self.default_sound = 'meow'
def make_sound_twice(self, sound=None):
if sound is None:
sound = self.default_sound
print("{sound} {sound}".format(sound=sound))
kitty = Cat()
kitty.make_sound_twice()
custom_sound = 'hiss'
kitty.make_sound_twice(custom_sound)
custom_sound = 0
kitty.make_sound_twice(custom_sound)这将打印以下几行:
meow meow
hiss hiss
0 0此时未定义self,因此不能简单地设置默认值,而不能设置None。
def make_sound_twice(self, sound=self.default_sound):发布于 2019-07-20 12:48:13
--你展示的代码绝对没有什么问题。,实际上,它是非常惯用的。
我经常读到,检查一个变量是否定义了某种程度上是一个错误的设计选择。
在您显示的示例中,定义了变量。它只是设置为None。
用is None检查它是完全可以的。在某些情况下,可以使用以下技术将所有falsy值(None、0、""等)替换为默认值:
DEFAULT = ...
def f(arg = None):
arg = arg or DEFAULT
...但是,这不适用于您的情况,因为您声明您需要能够将零传递给您的函数。
发布于 2019-07-20 12:51:27
你可以让它稍微干净一点:
def make_sound_twice(self, sound=None):
sound = self.default_sound if sound is None else sound
print("{sound} {sound}".format(sound=sound))或者另一种选择:
def make_sound_twice(self, sound=None):
sound = sound if sound is not None else self.default_sound
print("{sound} {sound}".format(sound=sound))但你现在所做的只是惯用的Python。
https://stackoverflow.com/questions/57124865
复制相似问题