2017-12-18 8 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

これはまったく役に立たないようです。名前aの値を別の辞書に格納すると、最初にaにアクセスしたときに '__dict__ 'に追加することができます。あなたはここにメモリやその他のリソースを保存しません。だから '__init__'でaとbを設定するのはなぜですか? – timgeb

+0

上記はSOLIDの方法論には程遠く、最適かつ最適な設計とはかけ離れています – RomanPerekhrest

+0

__datasはsql requestからロードされます。私は必要な場合にのみデータをロードしたい。 – 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'私はacces属性をしようとするたびに呼び出す – Dbi

関連する問題