有点奇怪的问题,但是我在编码时偶然发现了这个问题。
这是我的代码
编辑:我添加了类以使我的结构更清晰
class Hidden(object):
def x(self, aa, bb="John Doe"):
print aa, bb
class Open(object):
def __init__(self):
self.h = Hidden()
def y(self, a, b=None):
# get rid of this if-else-foo
if b is None:
self.h.x(a)
else:
self.h.x(a, b)
o = Open()
o.y("Hello") # > Hello John Doe
o.y("Hello", "Mister X") # > Hello Mister X
Run Code Online (Sandbox Code Playgroud)
如果b是None(未设置),则我希望x不带参数的情况下调用方法(使用默认值)。
我想知道是否有办法摆脱if-else foo?
解
因为我只能接受一个答案,所以我可以说,所有列出的解决方案都有效。
这是给定答案的摘要:
*args很难阅读。if说法,我想避免。如果可以修改x:
def x(a, b=None):
b = "John Doe" if b is None else b
print a, b
Run Code Online (Sandbox Code Playgroud)
如果你想摆脱“如果”就这样做
self.h.x(a, [b, 'Default Value'][b is None])
Run Code Online (Sandbox Code Playgroud)
附:这适用于 python3.5+,我不关心 python2.7
从您更新的类问题来看,简单的方法是将别名命名self.h.x为y:
class Open(object):
def __init__(self):
self.h = Hidden()
self.y = self.h.x
Run Code Online (Sandbox Code Playgroud)
现在当你打电话时,o.y(...)你实际上只是在打电话Hidden.x:
o = Open()
o.y("Hello") # > Hello John Doe
o.y("Hello", "Mister X") # > Hello Mister X
Run Code Online (Sandbox Code Playgroud)