如果我有一個定義了一些屬性的類實體,我如何間接訪問它們?我的第一個想法是將它們放在一個字典中,然后使用關鍵字訪問它們,但這并不像我預期的那樣作業 - 下面的示例:
class Test:
def __init__(self):
self.testval=0
test=Test()
testfuncs={'A':test.testval}
print(test.testval)
testfuncs['A']=1
print(test.testval)
這會列印“0”,然后列印“0”,因為我沒有修改類變數,我只是將字典值更改為整數“1”。
所以我希望能夠訪問和修改屬性testval。這樣做的原因是在一個更大的程式中有一些定義的類實體變數,我想分配一次,然后在整個程序中重用。然后只需更新它們,dict它們就會隨處變化(它們是電壓通道,可能會隨著應用程式的變化而變化)。
uj5u.com熱心網友回復:
如果物件的名稱在變數中,則使用該getattr()函式獲取物件的屬性,并setattr()在類似情況下設定它。
class Test:
def __init__(self):
self.testval = 0
test=Test()
A = "testval"
print(test.testval)
setattr(test, A, 1)
print(test.testval)
你也可以定義你的類來擁有一個__setitem__方法;然后您可以使用類似字典的語法來設定屬性。
class Test:
def __init__(self):
self.testval = 0
def __setitem__(self, key, value):
setattr(self, key, value)
test=Test()
A = "testval"
print(test.testval)
test[A] = 1
print(test.testval)
最后(嗯,還有其他方法可以處理這個問題,但我只想再提一個)......最后,您可以創建一個包含對物件和屬性名稱的參考的類。當您想要傳遞此類參考時,這很方便。
class Test:
def __init__(self):
self.testval = 0
class IndirectAttribute:
def __init__(self, obj, attr):
self.obj = obj
self.attr = attr
def set(self, value):
setattr(self.obj, self.attr, value)
test = Test()
A = IndirectAttribute(test, "testval")
print(test.testval)
A.set(1)
print(test.testval)
uj5u.com熱心網友回復:
您可以將字典的值設定為您的測驗物件
class Test:
def __init__(self):
self.testval = 0
test = Test()
testfuncs = {'A': test}
print(test.testval) # prints 0
testfuncs['A'].testval = 1
print(test.testval) # prints 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436676.html
標籤:Python python-3.x 班级 字典
