假设我有一个叫Foo的类:
用户可以使用包含“a”或同时包含“b”和“c”的类。如果提供了a,则忽略“b”和“c”。
哪种做法更好:当提供所有三个参数时出现错误(确保程序员知道正在使用哪个)还是将其放入文档中,说明如果提供a,则忽略“b”和“c”?
一方面,出现错误更加明确,这是Pythonic的(“明确胜于隐式”)。另一方面,接受任何有效的方法更实际(“虽然实用性胜过纯洁性”)。
class Foo(object):
@staticmethod
def get_a(b, c):
if not b or not c:
raise ValueError("Invalid params!")
return b + c
def __init__(self, a=None, b=None, c=None):
if not a:
a = Foo.get_a(b, c)
self.a = a
用户可以使用包含“a”或同时包含“b”和“c”的类。如果提供了a,则忽略“b”和“c”。
哪种做法更好:当提供所有三个参数时出现错误(确保程序员知道正在使用哪个)还是将其放入文档中,说明如果提供a,则忽略“b”和“c”?
一方面,出现错误更加明确,这是Pythonic的(“明确胜于隐式”)。另一方面,接受任何有效的方法更实际(“虽然实用性胜过纯洁性”)。
FOO(b,c)
比Foo(Foo.get_a(b,c))
更容易输入,但并不清楚它是否优于简单的Foo(b+c)
。我相信你的实际代码更加复杂,但请考虑一下是否真的是Foo
的责任提供一种将b
和c
组合成a
的方法。 - chepner