强制某些设置需要可选参数
Force optional parameters to be required for some setting
我创建了一些 class,
class c:
def __init__(self, mode=False):
if mode:
force foo to require optional_parameter
def foo(self, optional_parameter=""):
print("something %s" % optional_parameter)
有没有一种方法,如果 class 是用 mode=True
实例化的,那么在调用该方法时所有 optional_parameter
值都是必需的,实际上不再是可选的?
你可以记住一个属性中的mode
,然后检查optional_parameter
是否已经通过:
class c:
def __init__(self, mode=False):
self.mode = mode
def foo(self, optional_parameter=""):
if self.mode and optional_parameter == "":
raise RuntimeError("optional_parameter must be passed")
print("something %s" % optional_parameter)
你可以用字典解包来概括这一点:
def foo(self, **kwargs):
if self.mode and 'optional_parameter' not in kwargs:
raise RuntimeError("optional_parameter must be passed")
print("something %s" % kwargs['optional_parameter'])
我找不到针对这种情况的最佳例外情况,您可能想要创建自己的例外情况。不过,我可以使用 RuntimeError
。
您还可以在构造函数中定义 foo
方法:
class C(object):
def __init__(self, mode=False):
self.mode = mode
self.foo = (self._foo_mandatory if mode else
lambda optional_parameter="": self._foo_mandatory(optional_parameter))
def _foo_mandatory(self, optional_parameter):
print("something {0}".format(optional_parameter))
>>> c1 = C(False)
>>> c1.foo("Good")
something Good
>>> c1.foo()
something
>>> c2 = C(True)
>>> c2.foo("Bad")
something Bad
>>> c2.foo()
Traceback (most recent call last):
...
TypeError: _foo_mandatory() takes exactly 2 arguments (1 given)
我创建了一些 class,
class c:
def __init__(self, mode=False):
if mode:
force foo to require optional_parameter
def foo(self, optional_parameter=""):
print("something %s" % optional_parameter)
有没有一种方法,如果 class 是用 mode=True
实例化的,那么在调用该方法时所有 optional_parameter
值都是必需的,实际上不再是可选的?
你可以记住一个属性中的mode
,然后检查optional_parameter
是否已经通过:
class c:
def __init__(self, mode=False):
self.mode = mode
def foo(self, optional_parameter=""):
if self.mode and optional_parameter == "":
raise RuntimeError("optional_parameter must be passed")
print("something %s" % optional_parameter)
你可以用字典解包来概括这一点:
def foo(self, **kwargs):
if self.mode and 'optional_parameter' not in kwargs:
raise RuntimeError("optional_parameter must be passed")
print("something %s" % kwargs['optional_parameter'])
我找不到针对这种情况的最佳例外情况,您可能想要创建自己的例外情况。不过,我可以使用 RuntimeError
。
您还可以在构造函数中定义 foo
方法:
class C(object):
def __init__(self, mode=False):
self.mode = mode
self.foo = (self._foo_mandatory if mode else
lambda optional_parameter="": self._foo_mandatory(optional_parameter))
def _foo_mandatory(self, optional_parameter):
print("something {0}".format(optional_parameter))
>>> c1 = C(False)
>>> c1.foo("Good")
something Good
>>> c1.foo()
something
>>> c2 = C(True)
>>> c2.foo("Bad")
something Bad
>>> c2.foo()
Traceback (most recent call last):
...
TypeError: _foo_mandatory() takes exactly 2 arguments (1 given)