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