2017-12-18 162 views
0

我想在python中動態加載屬性。我應該使用財產還是有更好的方法?這裏有一個例子:在Python中動態加載屬性

class Test: 

    def __init__(self): 
     self.__datas = None 
     self.id = 30 

    def loadDatas(self): 
     self.__datas = {"a": "Hello", "b": "Hi"} 


Test = Test() 
test.a // Call loadData and return "Hello" 
test.c // raise error 
test.id // print '30' 
+0

這對我來說似乎完全沒用。您將name的值存儲在另一個字典中,以便您可以在第一次訪問a時將它添加到__dict__中。你不會在這裏保存任何內存或其他資源。那麼爲什麼不在'__init__'中設置a和b呢? – timgeb

+0

以上是遠離SOLID方法論的,遠不是優秀和優化的設計, – RomanPerekhrest

+0

__datas是從sql請求中加載的。我只想在需要時加載數據。 – Dbi

回答

0

您只需更新數據字典中的每一個元素的測試.__ dict__,這是做到這一點的方法之一。

class Test: 
    def __init__(self): 
     self.__data = {'a': 'Hello', 'b': 'Hi'} 
     self.__dict__.update(self.__data) 
     self.id = 30 

    def add(self, key, value): 
     self.__data.update({key: value}) 
     self.__dict__.update(self.__data) 


test = Test() 
print(test.a) 
# print(test.c) raises error 
# print(test.id) OK 
test.add('c', 'b') 
# print(test.c) now ok 
+0

不,我想在每次嘗試訪問屬性時調用'loadDatas' – Dbi