有点奇怪的问题,但我在编码时偶然发现了这个问题。
这是我的代码
编辑: 我添加了类以使我的结构更清晰
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
如果 b
是 None
(未设置),我希望方法 x
在没有参数的情况下被调用(使用默认值)。
我想知道是否有办法摆脱 if-else foo?
解决方案
因为我只能接受一个答案,所以我可以说,所有列出的解决方案都有效。
这是我对给定答案的总结:
- @Duncan:对我来说,这是实现我想要的最好的方式。
- @falsetru:这也是一个不错的方法,尽管我认为带有
*args
的方法很难阅读。 - @peter-wood 和@tgg:两个版本都可以工作并节省 3 行代码。但是
if
语句仍然存在,我想避免这种情况。
原文由 ppasler 发布,翻译遵循 CC BY-SA 4.0 许可协议
从你更新的课程问题来看,简单的方法就是别名
self.h.x
asy
:现在当你调用
o.y(...)
你实际上只是在调用Hidden.x
: