2013-03-03 29 views
1

在我寫的Python遊戲中,我有兩個類; ShipType和Ship。 Ship對象代表一個具有自己的名字,年齡,庫存等的特定宇宙飛船......一個ShipType對象表示一艘船的「一條線」(比如Mazda Protege是一條汽車線),它有自己的名字,base這種類型的船的統計數據,Kelley Bluebook In Space價格等。在Python中複製屬性的更優雅的方式3

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上的屬性。

回答

5

你可以做這樣的:

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

getattrsetattr功能,讓你的get/set屬性,其名稱都存儲在字符串。因此,您可以指定要複製的屬性的名稱列表,然後通過在列表中循環來簡潔地複製它們。

相關問題