gpt4 book ai didi

python - 我应该如何重构/重新设计我的代码

转载 作者:太空宇宙 更新时间:2023-11-03 19:27:56 25 4
gpt4 key购买 nike

我正在用 Python 编写一个游戏,并且正在寻找一些有关如何重新设计代码的建议。以下是游戏实体的运动组件的定义。

加载函数采用 PropertyTree 对象并相应地设置 self 的属性。 save 函数则执行相反的操作:根据 self 的属性,生成并返回 PropertyTree。

class Movement(EntityComponent):
def __init__(self):
# Default values
self.speed = 0
self.acceleration = 0

def load(self, properties):
self.speed = int(properties['Speed'])
self.acceleration = int(properties['Acceleration'])

def save(self):
pt = PropertyTree()
pt['Speed'] = str(self.speed)
pt['Acceleration'] = str(self.acceleration)
return pt

代码的问题在于存在大量信息重复。首先,我复制将 PropertyTree 中的键与 self 的属性相关联的信息,并且还复制键本身('Speed''Acceleration' 字符串出现两次)。显然,有很大的出错空间。

我该如何重构它?

最佳答案

作为起点:

class Movement(EntityComponent):
def __init__(self):
# Default values
self.speed = 0
self.acceleration = 0

serializable_fields = [
('speed', int),
('acceleration', int)
]

def load(object, source):
for name, field_type in object.serialiable_fields:
settarr(object, name, field_type(source[name]))

def save(object):
target = PropertyTree()
for name, field_type in object.serializable_fields:
target[name] = str(getattr(object, name))
return target

基本上,创建一个单独的保存/加载系统,可能在 EntityComponent 类中。只需提供字段的数据列表即可告诉系统如何序列化当前对象。

如果您不熟悉它,您还可以查看Python的pickle模块是如何工作的。我不建议将它用于除微不足道的情况之外的任何事情,但它可能会给您一些想法。

关于python - 我应该如何重构/重新设计我的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7374145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com