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__对象,成功实现了通过"对象['属性或方法名']"这样的形式去访问和设置对象的属性或方法。

  • 相关阅读:
    容器之队列的使用
    容器之栈的使用
    rapidxml的使用
    C++判断文件夹是否存在并创建文件夹
    VS2017,不能将const char *转为char *
    CSS_day01_选择器
    HTML_day02_列表
    HTML_day01基本标签
    python_day3
    python_day2
  • 原文地址:https://www.cnblogs.com/leilijian/p/13219573.html
Copyright © 2011-2022 走看看