zoukankan      html  css  js  c++  java
  • python魔法方法之"[]拦截方法"(__setitem__和__getitem__)

    []拦截方法的意思就是通过"对象['属性或方法名']"这样的形式去访问和设置对象的属性或方法;

    class Person:
        def __init__(self,name):
            self.name = name
    
    p1 = Person('vincent')
    # p1['name'] = 'xiaoming'    #TypeError: 'Person' object does not support item assignment
    print(p1['name'])          #TypeError: 'Person' object is not subscriptable     
    

    从上面的例子中可以看出,通常的对象是无法通过"对象['属性或方法名']"这样的形式去访问和设置对象的属性或方法;

    class Person:
        def __init__(self,name):
            self.name = name
        def __getitem__(self, item):
            return getattr(self,item)
        def __setitem__(self, key, value):
            setattr(self,key,value)
    
    p1 = Person('vincent')
    p1['name'] = 'xiaoming'
    p1['age']  = 18
    print(p1['name'],p1['age'])     #xiaoming 18
    

    通过重写__getitem__和__setitem__对象,成功实现了通过"对象['属性或方法名']"这样的形式去访问和设置对象的属性或方法。

  • 相关阅读:
    文件操作与函数
    编码格式
    if、while、for快速掌握
    运算符、数据类型、数据结构
    正则表达式
    面向对象--属性
    面向对象--对象的创建
    函数的内置属性
    类型检查
    函数表达式 及 闭包
  • 原文地址:https://www.cnblogs.com/leilijian/p/13219573.html
Copyright © 2011-2022 走看看