2015-10-04 72 views
2

的許多屬性相同的操作,我有以下Python對象:執行上一個Python對象

class car(object): 

    def __init__(self, name, cost, type, speed): 
     self.name = name 
     self.cost = cost 
     self.type = type 
     self.speed = speed 

    def get_name(self): return self.name 
    def get_cost(self): return self.cost 
    def get_type(self): return self.type 
    def get_speed(self): return self.speed 

然後我要執行相同的操作對象的一些參數。我想爲每個指定的屬性加1。這樣做的

一種方法顯然是:

obj = car('volvo', 100, 0, 5) 
obj.cost = obj.cost + 1 
obj.type = obj.type + 1 
obj.speed = obj.speed + 1 

但這浪費了幾行代碼。有沒有辦法做這樣的事情:

attributesToModify = ['cost', 'type', 'speed'] 
for e in attributesToModify: 
    obj.e = obj.e + 1 
+0

看看[在Python中獲取動態屬性](https://stackoverflow.com/questions/13595690/getting-dynamic-attribute-in-python) – JGreenwell

回答

2

我認爲你正在尋找使用setattrgetattr

attributesToModify = ['cost', 'type', 'speed'] 
for e in attributesToModify: 
    setattr(obj, e, getattr(obj, e) + 1) 
+1

不完全:你需要使用'getattr'而不是'obj .e'。 –

+0

我發現,看着我的代碼,我*只是*編輯我的代碼,當你張貼。 :P – idjaw

3

你可以只添加一個方法到類:

def inc(self, i): 
    self.cost += i 
    self.type += i 
    self.speed += i 

然後遞增:

obj.inc(1) 
+2

可讀且清晰。 – Sait

+0

這對我的實際使用情況並不是最好的。我有5個屬性,我想通過+/-屬性值將它們改變20%,並且每次只改變一個屬性。 – Apollo

+0

@Apollo,這一切都可以在該方法中完成。一旦你知道你想要做什麼,你可以採取其他參數。 –

相關問題