以下哪些代码片段最"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
Run Code Online (Sandbox Code Playgroud)
要么
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)
Run Code Online (Sandbox Code Playgroud)
要么
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
Run Code Online (Sandbox Code Playgroud)
正如所写,A,由远景.这个问题非常简单
Flat优于嵌套.
看:将状态与计算分开是一个很好的设计原则,但它并不意味着你的想法,至少不是我能推断你从这个例子中想到的.我们希望确保状态不会改变,以便完成计算,如果该状态不会在下一次计算中重新初始化.如果状态对于某些特定计算是只读的,则没有风格强制重定向它,以便您不直接读取它.也就是说,除非计算和状态足够复杂,需要单独的单元测试.然后,无论如何,B或C将是首选,但只有当它实际上更容易创建值而u不是实例化新的实例时A.
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |