所以在我的代碼GETATTR玩弄我發現了以下內容:的Python - GETATTR和串聯
myVariable = foo.A.bar
作品......但這樣的事情:
B = "A"
myVariable = getattr(foo, B + ".bar")
返回一個錯誤,FOO不包含屬性A.bar。我哪裏錯了?謝謝!
所以在我的代碼GETATTR玩弄我發現了以下內容:的Python - GETATTR和串聯
myVariable = foo.A.bar
作品......但這樣的事情:
B = "A"
myVariable = getattr(foo, B + ".bar")
返回一個錯誤,FOO不包含屬性A.bar。我哪裏錯了?謝謝!
因爲foo
上沒有屬性A.bar
。屬性bar
是由A
指向的對象的一部分,它是foo
的屬性。您需要用
getattr(foo.A, "bar")
或
getattr(getattr(foo, 'A'), 'bar')
訪問深屬性的通用代碼是分割的點,並且去,直到最後被發現(我是從內存寫作,沒有測試):
def getattr_deep(start, attr):
obj = start
for part in attr.split('.'):
obj = getattr(obj, part)
return obj
getattr_deep(foo, 'A.bar')
的當量:
myVariable = foo.A.bar
使用getattr將需要2個步驟。
aObject = getattr(foo, 'A')
myVariable = getattr(aobject, 'bar')
你的方式做`MYVARIABLE = GETATTR(FOO,B + 「的.bar」) 手段 'MYVARIABLE = GETATTR(FOO, 「B.bar」)' GETATTR現在查找字符串「B.酒吧「顯然不存在。
感謝您爲我澄清這一點! – Bitrex