以下哪个代码片段最“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
的新实例更容易时>。
关于python - 在 Python 中将有状态对象和无状态计算之间的分隔放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2410265/