Python中的__getitem__和__setitem__特殊方法

原创 2014年11月21日 11:01:50

在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)


python总结(五):__get__、__getattr__、__getitem__、__getattribute__之间的差异与联系

python的一切数据都是对象,包括函数、基本数据类型、自定义数据类型等等,这其中最复杂的就是对象内部存储的数据结构(引用),包括类属性、数据描述符、实例属性及非数据描述符,不仅它们的优先级不一样,而...
  • yiifaa
  • yiifaa
  • 2017年09月23日 10:00
  • 761

python四个魔法方法__len__,__getitem__,__setitem__,__delitem__

python中除了可以使用内建的类型,如list,tuple,dict,还可以创建自己的对象来实现像这些内建类型的访问,不过需要在定义类的时候对一些魔法方法逐一实现。 如下: class DictDe...
  • yuan_j_y
  • yuan_j_y
  • 2013年07月13日 21:32
  • 17435

Python类的__getitem__和__setitem__特殊方法

一个有点绕的例子,用PyScripter调试器步进跟踪可以看清楚对 象结构的具体细节。 对原作改变了一下,在未定义子对象属性时__getitem__中使用现成的__setitem__来定义。 ...
  • liujianfei526
  • liujianfei526
  • 2016年02月04日 11:51
  • 1568

Python __getitem__和自定义的迭代器

__getitem__: __getitem__拦截索引运算符:当实例X出现在X【i】这样的索引运算中时,Python会调用这个实例继承的__getitem__方法(如果有的话)把X作为第一个参...
  • u012829152
  • u012829152
  • 2014年12月13日 17:20
  • 2930

python中__getitem__, __setitem__, __delitem__的使用

参考: 伯乐地址用于索引操作,如字典。以上分别表示获取、设置、删除数据#Python __doc__ class C(object): """ Holy Shit What The Fuck ...
  • qianguozheng
  • qianguozheng
  • 2015年12月24日 20:48
  • 2089

python :使用 __getitem__ 和 __iter__ 可以使类成为一个迭代器

# -*- coding: utf-8 -*- class Library(object): def __init__(self): ...
  • heyijia0327
  • heyijia0327
  • 2015年04月17日 20:10
  • 1403

python object has no attribute '__getitem__'

class Animal(object): def __init__(self, name): self.name = name a1 = Animal...
  • lanyang123456
  • lanyang123456
  • 2017年05月30日 22:04
  • 3543

listview的getItem和getItemId

在使用listview的时候经常会重写getItem()和getItemId()这两个方法,有的博客说getitem会在getview中使用,这是不对的,我们可能会疑惑这俩方法有什么用,有时候我们会直...
  • jijiaxin1989
  • jijiaxin1989
  • 2014年12月09日 17:18
  • 3859

Python基础-定制类(str_iter_getItem_getattr_call)

str让打印更加好看示例#!/usr/bin/env python3 # -*- coding: utf-8 -*- # 定制类 __str__class Animal(object): def...
  • su749520
  • su749520
  • 2017年12月14日 23:37
  • 256

Python类的__getitem__和__setitem__特殊方法

>>> class testsetandget: kk = {}; def __getitem__(self, key): return self.kk[key]; def __setitem__(...
  • xxkkff
  • xxkkff
  • 2009年07月30日 21:13
  • 17254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python中的__getitem__和__setitem__特殊方法
举报原因:
原因补充:

(最多只允许输入30个字)