python - 将不同的东西分配给由类制成的对象的最有效方法?
问题描述
我经常遇到这样的问题,但这里有一个例子。
假设我正在为游戏制作主菜单。该开发者提供了 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)]
为了实现这一点,__init__
需要像:
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(Open Closed Principle)。每当您想添加新按钮时,该类都需要修改。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]
确实已经更好了,但是恕我直言,违反了 KISS 原则(保持简单,愚蠢)。
在那段代码中,开发人员需要确保text
并且color
始终具有相同数量的元素,并且for
循环具有正确的范围。
在我上面发布的示例中,如果没有 IDE 事先抱怨,您几乎不会出错。
推荐阅读
- c# - 从 JSON 数组创建嵌套 JSON 数组
- matplotlib - 子图中的独特图例(matplotlib)
- scala - scala akka 不重定向
- php - 将 PHP 从 7.2.34 更新到 7.4.22 导致 Apache 无法启动
- function - Ghidra 找不到功能
- java - 如何将 ListView 对象中的选定项转换为字符串?
- python - `os.system` 找不到由`with open` 创建并由`with open` 读取的文件
- python - 使用 python 从 pdf 文件创建密码文件(我想使用河豚算法)
- python - 根据python google colab中的均值和标准差重新分类光栅图像集合?
- r - 如何将一个(逗号拆分)列转换为 R 中的多列?