以下哪个代码片段最“pythonic”?此示例中的计算很简单,但可以假设在现实生活中很复杂。
class A(object):
"""Freely mix state and calcs - no good I presume"""
def __init__(self, state):
self.state = state
def calc_with_state(self, x):
return (self.state + x)**2
或
class B(object):
"""Separate state from calc by a static method"""
@staticmethod
def inner_calc(u, v):
return (u + v)**2
def __init__(self, state):
self.state = state
def calc_with_state(self, x):
return B.inner_calc(self.state, x)
或
class C(object):
"""Break out the calculation in a free function"""
def __init__(self, state):
self.state = state
def calc_with_state(self, x):
return outer_calc(self.state, x)
def outer_calc(u, v):
return (u + v)**2
请您参考如下方法:
如所写,A,远射。问题很简单,就是
Flat is better than nested.
你看:状态和计算分离是一个很好的设计原则,但它并不代表你的想法,至少不是我从这个例子中可以推断出你的想法。如果该状态不会在下一次计算中重新初始化,我们要确保状态不会改变以便完成计算。如果状态对于某些特定的计算是只读的,那么就没有风格上的强制性要求围绕它进行重定向,这样您就不会直接读取它。也就是说,除非计算 和 状态足够复杂以至于需要单独的单元测试。然后,无论如何,B 或 C 将是首选,但只有当为 u 创建值真的比实例化 A 的新实例更容易时>。
