我经常读到,检查是否定义了变量在某种程度上是错误的设计选择。但是我没有其他方法可以处理类方法中的可选参数。在下面的代码中处理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):
答案 0 :(得分:7)
您显示的代码绝对没有错。实际上,这很惯用。
我经常读到,检查是否定义了变量在某种程度上是错误的设计选择
在您显示的示例中,定义了变量 。它只是设置为exampleDF$zacko[ is.na(exampleDF$zacko) ] <- "REPLACEMENT"
。
使用None
进行检查完全可以。在某些情况下,可以使用以下技术用默认值替换所有伪造的值(is None
,None
,0
等)
""
但是,这不适用于您的情况,因为您声明需要将零传递给函数。
答案 1 :(得分:1)
您可以使其更加清洁:
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。