如何访问属性属性__init__中传递的参数?

时间:2016-07-01 13:53:09

标签: python

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属性?你可以建议我任何更清洁的方法来做到这一点。

2 个答案:

答案 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']