1. 程式人生 > >Python中的__getitem__和__setitem__特殊方法

Python中的__getitem__和__setitem__特殊方法

在Nova的原始碼中,基本上所有的類都繼承NovaObject,這些類可以直接以a[key]=value的方式給物件增加新的屬性並且通過a[key]的方式獲取物件屬性,這是因為在NovaObject中實現了兩個方法__getitem__和__setitem__。

下面是NovaObject的部分原始碼:

class NovaObject(object):
    ...
    def __getitem__(self, name):
        """For backwards-compatibility with dict-based objects.

        NOTE(danms): May be removed in the future.
        """
        return getattr(self, name)

    def __setitem__(self, name, value):
        """For backwards-compatibility with dict-based objects.

        NOTE(danms): May be removed in the future.
        """
        setattr(self, name, value)