我只需要使用一次operatorDict来确定我正在为该类使用哪个操作。将正确的运算符存储在self._f内部的最Python方式是什么?

class m:
    def __init__(self,n,operator,digit1,digit2):
        self._operatorDict = {'+':add, '-':sub, 'x':mul, '/':truediv}
        self._f = self._operatorDict[operator]
        self._score = 0
        self._range = n
        self._aMin, self._aMax = getMaxMinDigits(digit1)
        self._bMin, self._bMax = getMaxMinDigits(digit2)

最佳答案

这在很大程度上取决于您要公开多少operatorDict。在这种情况下,我可能会推荐以下两种方法之一。

选项1:将dict放在课堂上:

class m:
    _operatorDict = {'+':add, '-':sub, 'x':mul, '/':truediv}

    def __init__(self,n,operator,digit1,digit2):
        self._f = self._operatorDict[operator]
        self._score = 0
        self._range = n
        self._aMin, self._aMax = getMaxMinDigits(digit1)
        self._bMin, self._bMax = getMaxMinDigits(digit2)


由于_operatorDict不会在类内部发生变异,因此似乎没有必要将其作为实例属性。但是,从某种意义上说,它仍然属于该类。这种方法还允许您根据需要更改operatorDict(例如,在子类中)。

选项2:将dict放入全局名称空间:

_operatorDict = {'+':add, '-':sub, 'x':mul, '/':truediv}

class m:

    def __init__(self,n,operator,digit1,digit2):
        self._f = _operatorDict[operator]
        self._score = 0
        self._range = n
        self._aMin, self._aMax = getMaxMinDigits(digit1)
        self._bMin, self._bMax = getMaxMinDigits(digit2)


此处的优点与以前相似-主要是您只创建一个operatorDict,而不为每个m实例创建一个。更为严格的是,这种形式实际上不允许通过子类轻松更改operatorDict。在某些情况下,这种刚性可能是理想的。另外,正如评论中提到的那样,如果您使用第二个选项,则将_operatorDict命名为您的命名系统中的常量(例如pep8中的_OPERATOR_DICT)可能是个好主意。

关于python - 是否应该将在初始化期间仅使用一次的格令放到类中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42236042/

10-09 01:07