在python3中复制属性的更优雅的方法

2024-05-16 18:41:19 发布

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

在我正在编写的Python游戏中,我有两个类:ShipType和Ship。一个飞船对象代表一个特定的飞船,它有自己的名字,年龄,库存等。。。ShipType对象表示一条船的“线”(就像马自达Protege是一条车的“线”),它有自己的名字、该类型船的基本统计数据、空间价格中的Kelley Bluebook等等

Ship的构造函数将ShipType作为参数,因为所有Ship-s都应该派生自ShipType。该构造函数如下所示:

...
def __init__(self,theshiptype):
    if not isinstance(theshiptype,ShipType):
        raise TypeError
    self.name=theshiptype.name
    self.inventory=Inventory(theshiptype.invslots)
    self.maxhp=theshiptype.maxhp
    self.thrust=theshiptype.thrust
    self.ftlspeed=theshiptype.ftlspeed
    ...

如您所见,这个构造函数中发生的大部分事情只是将相同名称的属性从传递的对象复制到self。我想知道的是,有没有更简单的方法?你知道吗

值得注意的是,ShipType上有一些属性不应该在船上。你知道吗


Tags: 对象nameself游戏属性代表名字年龄
1条回答
网友
1楼 · 发布于 2024-05-16 18:41:19

你可以这样做:

attrsToCopy = ['name', 'inventory', 'maxhp', 'thrust', 'ftlspeed']
for attr in attrsToCopy:
    setattr(self, attr, getattr(theshiptype, attr))

getattrsetattr函数允许您获取/设置名称存储在字符串中的属性。因此,您可以指定要复制的属性的名称列表,然后通过在列表上循环简洁地复制它们。你知道吗

相关问题 更多 >