1

我以 Python 为例。

class ThingArguments:
    def render(self, text, color):
        return magiclibrary.generateText(text, color)


class ThingStates:
    def __init__(self):
        self.color = (0, 0, 0)

    def render(self, text):
        return magiclibrary.generateText(text, self.color)

    def setColor(self, color):
        self.color = color

哪个更适合 Python?对于任何语言,哪一种更可取?各有什么优势..?

4

1 回答 1

1

首先,正如 Sven Marnach 提到的,第一个示例应该是一个普通函数:

def render(self, text, color):
    return magiclibrary.generateText(text, color)

那么这个普通函数和类解决方案有什么区别呢?

普通函数

  • 易于记录和理解
  • 测试很简单(只需连续进行多次调用并将输出与预期进行比较)
  • 更简单的心智模型,减少意外和错误
  • 将文本和颜色保持在同一位置,因此您始终知道将使用哪种颜色

班级

  • 可以扩展,透明地导致其他行为
  • 可以作为参数传递,其他地方可以render在不指定颜色的情况下调用(如果这是最常见的行为,这很重要)

在 Python 中,通常首选第一种方法。一个简单的函数意味着更少的状态需要担心,这对于更大或更复杂的程序来说可能是一件大事。此外,显式优于隐式

我总是更喜欢第一种方法,即使不完全可用。想到 Java,函数必须始终包含在类中,因此我最终在抽象类中使用了许多静态函数。

我认为这更多的是上下文问题而不是语言问题。例如,如果该类用于渲染日志,则该类将更可取,调用它的函数不太关心颜色。另一方面,如果大多数调用者都知道颜色并想选择它,那么该类将是一个禁忌。

和往常一样,当有疑问时,采取更简单的方法。使代码复杂化比简化更容易。

于 2012-12-19T01:11:11.767 回答