基于状态与传递参数

2024-10-02 20:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我以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,哪个更容易接受?哪种语言更可取?它们各自的优点是什么。。?你知道吗


Tags: textself语言returninitdefrenderclass
1条回答
网友
1楼 · 发布于 2024-10-02 20:36:31

首先,as Sven Marnach mentioned,第一个例子应该是一个普通函数:

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

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

普通函数

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

班级

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

在Python中,通常首选第一种方法。一个普通函数意味着更少的状态需要担心,这对于更大或更复杂的程序来说是一件大事。另外,explicit is better than implicit。你知道吗

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

我认为与其说是语言问题,不如说是语境问题。如果该类用于呈现日志(例如,在调用它的函数不关心颜色的情况下),则该类更可取。另一方面,如果大多数调用者知道颜色并想选择它,那么这个类将是一个禁忌

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

相关问题 更多 >