我只需要使用一次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/