2015-05-29 31 views
1

比方說,我有在Python如下:值的一類添加在Python

Test.setvalue1('Hola') 

Test.Value1 = 'Hola' 

class Test(): 
    self.value1 = 1 
    self.value2 = 2 

def setvalue1(self, value): 
    self.value1 = value 

所以一個可以通過執行設置值1到現在爲止還挺好。我的問題是,我想通過閱讀他們在其他地方設置值,所以比如我可能有以下幾點:

A = [['Value1','Hola'],['Value2','Adios']] 

我想能夠運行的東西,會做(在僞代碼):

for each in A: 
    Test.each[0] = A[1] 

這可能嗎?非常感謝!

+3

是您的代碼的縮進按預期? 'setvalue1'是'Test'的成員嗎? – 2015-05-29 12:35:28

+3

http://stackoverflow.com/questions/285061/how-do-you-programmatically-set-an-attribute-in-python – iced

+1

不是'self' undefined在你設定的位置'self.value1 = 1'? – Holloway

回答

1

你可以那樣做:

class Test: 

    def __init__(self): 
     self.val1 = 1 



t = Test() 
setattr(t, 'val2', 2) 

print t.val2 

或類似的:

class Test: 

    def __init__(self): 
     self.val1 = 1 

    def setself(self, name, val): 
     self.__dict__[name] = val 

t = Test() 
t.setself('val3', 3) 

print t.val3 
+1

除非你知道*非常確切地*你正在做什麼,正確的解決方案是'setattr()',它將尊重描述符協議(計算屬性),同時直接設置'self .__ dict__'不會。 –

+0

嗯,很高興知道,我會看這個 – Maresh

0

遍歷數據結構和類Test的實例使用setattr()

test = Test() 

data = [('Value1', 'Hola'), ('Value2', 'Adios'] 
for k, v in data: 
    setattr(test, k, v) 

這種數據結構btw通常被認爲是一個「鍵/值」對你可以在這裏使用Python字典(dict)。

例子:

test = Test() 

data = {"value1": "Hola", "Value2": "Adios"} 
for k, v in data.items() 
    setattr(test, k, v) 

現在讓我們來修理你Test類:

class Test(object): 

    def __init__(self): 
     self.value1 = 1 
     self.value2 = 2 

    def setvalue1(self, value): 
     self.value1 = value 
+1

以哪種方式添加無用的屬性「修復」? OP類中唯一被破壞的東西是縮進和缺少'__init__'方法(或者更確切地說,應該是直接在類級別的__init__方法中)。 –

+0

@brunodesthuilliers你是對的;我已經刪除了無用的屬性:) –