如何在python类中访问dict.get('key')之类的属性

时间:2018-07-04 12:48:50

标签: python python-3.x

class Investor:
    def __init__(self, profile):
        self.profile = profile

    def __getitem__(self, item):
        return self.profile[item]

可以简单地通过Investor['name']访问投资者资料, 但是当我使用get() Investor.get('name')

时会出错

已筹集:AttributeError: 'Investor' object has no attribute 'get'

我知道可以通过在投资人类别中添加get()方法来解决此问题,但这是正确的方法吗?还是有其他特殊方法__get__或其他什么方法?

6 个答案:

答案 0 :(得分:4)

标准get也具有默认值。所以这将是完整版本:

def get(self, item, default=None):
    return self.profile.get(item, default=default)

就此而言,就我所知,没有任何更好的方法,因此默认情况下为

答案 1 :(得分:3)

为什么不只定义一个get函数?

def get(self, item):
    return self.profile.get(item)

答案 2 :(得分:2)

如前所述,尚不存在特殊的“获取”函数,您可以从对象类继承。要获得所需的功能,您需要实现自己的“获取”功能。

如果您实际上想创建很多类似于Investor的类,并且都具有get()函数,那么您应该创建一个超类供Investor继承。

class Person(object):
    def __init__(self, profile):        
        self.profile = profile

    def get(self, item):
        if item in self.profile:
            return self.profile[item]

class Investor(Person):
   def __init__(self, profile):
       super().__init__(profile)

答案 3 :(得分:0)

使用@property怎么样?

class Investor:
    def __init__(self, profile):
        self._profile = profile

    @property
    def profile(self):
        return self._profile


if __name__ == "__main__":
   inv = Investor(profile="x")
   print(inv.profile)

礼物:

x

答案 4 :(得分:0)

最简单的解决方案是在try:#code except: #code方法中使用__getitem__块。例如:

class Investor:
    def __init__(self, profile):
       self.profile = profile

    def __getitem__(self, item):
       try:
         return self.profile[item]
       except:
         return 0

`

这将帮助您获取功能类似的字典get()方法,而不必添加新的get()方法。

答案 5 :(得分:0)

假设您有一个investor_object,例如:
investor_object = Investor({'name': 'Bob', 'age': 21})

您可以执行以下任一操作:
investor_object.profile['name']

investor_object.profile.get('name')

礼物:
Bob