2015-06-11 52 views
0

我正在嘗試爲需要一堆文件的類編寫一個函數,並將它們作爲屬性添加到類中。Python中的動態類屬性?

現在我有一些類foo,另一類bar。我想基本上檢查一個字符串列表(這是簡化的),並將這些字符串中的每一個添加爲foo的屬性,並且這些屬性中的每一個屬於bar。所以foo有一堆bar類型的屬性。現在我已經使用python的__setattr__完成了這個工作,這很好。真正的問題是我需要在bar中設置一個屬性,並且我需要爲每個foo屬性執行此操作。

所以現在,我有一個循環:

for name in list: 
    self.__setattr__(name, bar(a, b, ..)) 
    self.name.a = 123 

不幸的是,這個屬性被讀成「名」,而不是在列表中的值。 所以我得到一個錯誤,如:foo object has no attribute name。 我需要的是一些動態訪問。我知道getattr,但據我所知,這返回一個值,我不認爲適用於我的情況。你們知道什麼可以在這裏工作嗎?

編輯:我也可以添加我需要設置爲構造函數參數的東西。我不想這樣做的原因是我認爲它有點重載構造函數,並使其變得混亂,特別是因爲參數名稱會很長。這就是說,如果有必要,我可以做到這一點。

+0

你的意思'GETATTR(個體經營,名稱)。A = 123'?真的不清楚爲什麼你不能通過'123'進入課堂,你可能會遇到更大的結構問題。你也應該使用'setattr'而不是調用'__setattr__'。 – jonrsharpe

+0

是的,你是對的,因爲某些原因,我在思考事物並被'self.name.attribute'的概念所困住。 – Jpwang

回答

2

在一個局部變量保存欄實例:

for name in list: 
    bar_value = bar(a, b, ..) 
    setattr(self, name, bar_value) 
    bar_value.a = 123 
+0

啊是的。我嘗試了類似的方式,但是以某種方式製作。我完全忽略了這一點,我努力讓自己的事情複雜化。 – Jpwang