1

在我正在编写的 Python 游戏中,我有两个类;船舶类型和船舶。Ship 对象代表具有自己的名称、年龄、库存等的特定宇宙飞船... ShipType 对象代表船舶的“线”(如 Mazda Protege 是汽车的“线”),具有自己的名称、底座该类型船的统计数据,Kelley Bluebook In Space 价格等。

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
    ...

正如你所看到的,这个构造函数中发生的大部分事情只是将同名的属性从传递的对象复制到自身。我想知道的是,有没有更短的方法来做到这一点?

值得注意的是,ShipType 上的某些属性不应该出现在 Ship 上。

4

1 回答 1

5

你可以这样做:

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

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

于 2013-03-03T04:29:07.740 回答