python - 在 Python 中将有状态对象和无状态计算之间的分隔放在哪里?

标签 python

以下哪个代码片段最“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/

相关文章:

python - HyperVolume 函数在 Python 3 中不起作用

python - 从 'uneven' XML 构建数据库记录的最佳方法是什么

python - Python 中的快速素数筛选

Python pandas 数据框根据条件分组

python - 升级到 Mavericks 后 Bpython 无法工作

python - 如何为 Ansible 剧本选择 Python 解释器?

python - 如何在defaultdict中有效地进行反向查找?

python - 带有 pyarrow 的消费者-生产者模式

python - 为什么子类访问父类(super class)的属性,尽管在该属性被声明为私有(private)时具有自己的同名属性?

python - 当元组中的输出参数数量未知时忽略多个输出