class Data(object):
def __init__(self, info_dict):
self.name = info_dict["name"]
self.address = info_dict["address"]
self._url = None
@property
def url(self):
if 'my_url' in info_dict:
self._url = info_dict['my_url']
elif 'this_url' in info_dict:
self._url = info_dict['this_url']
return self._url
这是传递给对象的示例输入
info_dict = {"name" :"myname", "address" : "myaddress", "my_url" : "http://sdsf"}
another_info_dict = {"name" :"myname", "address" : "myaddress", "this_url" : "http://sdsf"}
正如您所看到的,字典中的网址带有两个不同的键 my_url 和 this_url 。所以我使用url属性来设置url而不管key。
现在问题是 init 函数中传递的info_dict无法在@property url方法中访问,我不想创建实例变量info_dict 和在url属性中访问它。有没有办法将它传递给url属性?你可以建议我任何更清洁的方法来做到这一点。
答案 0 :(得分:3)
在__init__
的上下文中,info_dict
是一个局部变量。完成__init__
后,变量就会消失。
最简单的解决方案是不使用该属性。
只需将逻辑移至__init__
,然后继续讨论更多有趣的问题。
答案 1 :(得分:0)
当我有两个可能存储我想要的值的字典键时,我总是使用try
except
块。
try:
self._url = info_dict['my_url']
except KeyError:
self._url = info_dict['this_url']