2015-08-28 51 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] 
相關問題