强制某些设置需要可选参数

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)