2015-08-28 43 views
1

我不确定这是否可行,但我希望将字典作为一个属性,在被调用时返回默认值。基本上沿着线的东西:我可以将字典作为具有默认返回值的属性吗?

class galaxy(object): 
    def __init__(self): 
     self.mass = {'total':10, 
        'gas':2, 
        'stellar':8} 

> gal = galaxy() 

## call the dict like an attribute 
> gal.mass 
10 

## but also have access to the dict 
> gal.mass['total'] 
10 
> gal.mass['gas'] 
2 

如果这甚至可以做,这将是去它的最有效方法是什么?

+0

为什么你会这样做吗?你在这里有一个自定义的对象,只是使群体成员和字典的另一个成员。 – saarrrr

+1

你可以给'galaxy'一个属性属性,它给你'mass ['total']'的当前值。这可以接受吗? –

+0

可以使用自定义元类来执行此操作。 –

回答

2

为您的最终用户至少令人惊讶的结果,我认为,将来自提供的访问方法带有可选参数,像这样:

class galaxy(object): 
    def __init__(self): 
     self._mass = {'total':10, 
         'gas':2, 
         'stellar':8} 
    def get_mass(self, body='total'): 
     return self._mass[body] 

gal = galaxy() 
print gal.get_mass() 
print gal.get_mass('gas') 

或者,也许:

class galaxy(object): 
    def __init__(self): 
     self._mass = {'gas':2, 
         'stellar':8} 
    def get_mass(self, body=None): 
     if body is None: 
      return sum(self._mass.values()) 
     return self._mass[body] 
相关问题