擅长:python、mysql、java
<p>我倾向于同意其他评论和答案,即最好使用这些常规参数,并允许在传递错误的参数时导致Python错误发生。在</p>
<p>但是,有时您可能需要执行一些特殊的验证过程。我不认为这是一个好的设计选择,但也许这是可能的。在</p>
<p>在这种情况下,我想创建一个包含验证逻辑的decorator:</p>
<pre><code>def arg_validator(*arg_names):
from functools import wraps
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for arg in arg_names:
if arg not in kwargs:
# Do some handling here for missing arg
return func(*args, **kwargs)
return wrapper
return decorator
</code></pre>
<p>然后创建一个修饰的helper函数,该函数构造应用了验证逻辑的类。在</p>
^{pr2}$
<p>现在,如果您调用<code>my_class_maker(...)</code>,当修饰函数检查关键字参数时,将执行验证逻辑。如果所有需要的参数都在那里,那么您只需取回创建的实例。在</p>
<p>这有一个额外的好处:验证逻辑是模块化的,并且与类本身的逻辑保持分离,因为验证的思想可能应用于许多不相关的类,每个类都没有真正的理由关心为什么类的外部用户需要验证。在</p>
<p>您甚至可以扩展我编写的decorator并允许将callable传递到decorator maker,然后该callable可以封装验证行为,以便在找不到参数时执行。那么,即使是特定的验证行为也不必修复。在</p>