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