Python 将不同的东西分配给由类生成的对象的最有效方法是什么?

Python 将不同的东西分配给由类生成的对象的最有效方法是什么?,python,class,Python,Class,我经常遇到这样的问题,但这里有一个例子 假设我正在制作一个游戏的主菜单。有5个按钮,播放、设置、关卡选择、教程,和此开发人员提供的更多按钮。我想为每个按钮使用相同的类。它们中的每一个都将显示不同的文本、位置和颜色。我可以做耗时的if语句,但是有没有更快的方法 def __init__(self): self.button=button if self.button=="play": self.text="play"

我经常遇到这样的问题,但这里有一个例子

假设我正在制作一个游戏的主菜单。有5个按钮,播放、设置、关卡选择、教程,此开发人员提供的更多按钮。我想为每个按钮使用相同的类。它们中的每一个都将显示不同的文本、位置和颜色。我可以做耗时的if语句,但是有没有更快的方法

def __init__(self):
    self.button=button
    if self.button=="play":
        self.text="play"
    elif self.button=="settings":
        self.text="settings"

     #and so on...
我现在使用的方法是列表

text=["play","settings","tutorial"]
colors=[black,white,red]

for i in range(3):
    button=button_class()
    button.text=text[i]
    button.color=colors[i]

它一直运行得很好,但我仍然没有做任何涉及到每个类更多具体数据的事情。我想知道是否有人对此有任何见解?这毕竟是Python,我相信有一个简单的解决方案。哦,如果有什么帮助的话,我正在使用pygame。

我会使用

buttons = [button_class("play", black),
           button_class("settings", white),
           button_class("tutorial", red)]
要实现这一点,
\uuuuu init\uuuu
需要如下:

def __init__(self, text:str, color):
    self.text = text
    self.color = color

代码式

def __init__(self):
    self.button=button
    if self.button=="play":
        self.text="play"
    elif self.button=="settings":
        self.text="settings"
违反干净代码的OCP()。每当您想要添加新按钮时,该类都需要修改。OCP说类应该关闭以进行修改,但仍然可以打开以进行扩展

在我上面发布的示例中,您仍然可以创建许多不同的按钮(“打开”),但无需更改按钮类本身(“关闭”)


代码

text=["play","settings","tutorial"]
colors=[black,white,red]

for i in range(3):
    button=button_class()
    button.text=text[i]
    button.color=colors[i]
确实已经更好了,但IMHO违反了接吻原则()

在这段代码中,开发人员需要确保
text
color
始终具有相同数量的元素,并且
for
循环具有正确的范围


在我上面发布的示例中,如果IDE事先没有抱怨,您几乎无法出错。

创建
按钮
,将
文本
颜色
动作
作为
\uu初始
中的属性。我可以看看您想说的话的示例吗?也许您不是一个很糟糕的程序员。至少你提出了正确的问题。一些开发人员将第一个代码示例视为完全正常:-(哦,我不知道你能做到这一点!我不必在范围内(3)中做<代码>,对吗?这是非常基本的对象实例化的东西。你不应该在init(或任何其他函数)中描述一个if语句。。该类应具有更改该类不同对象行为的属性。@bad_coder:没错。按钮当时已初始化。可能您需要为按钮中的按钮设置
循环,以便pygame知道这些按钮