zoukankan      html  css  js  c++  java
  • python 常见内置函数setattr、getattr、delattr、setitem、getitem、delitem

    常见内置函数

    • 内置函数:在类的内部,特定时机自动触发的函数

    • 示例1:setattr、getattr、delattr

    class Person:
    # def __init__(self, name):
    # self.name = name
    
    def __setattr__(self, key, value):
    # 当设置对象成员属性的时,系统会自动调用
    print(key, value)
    self.__dict__[key] = value
    
    def __getattr__(self, item):
    # 当访问不存在的对象属性时,系统会自动调用
    if item == 'age':
    return 123
    else:
    return 'default'
    
    def __delattr__(self, item):
    # 当销毁对象的成员属性时,系统会自动调用
    print('del', item)
    
    
    xiaoming = Person()
    
    # 每个对象都有一个成员属性:__dict__
    # 用于存放对象的属性,包括动态添加的
    # print(xiaoming.__dict__)
    
    # xiaoming.name = '小明'
    # print(xiaoming.name)
    
    # print(xiaoming.__dict__)
    
    # xiaoming.age = 18
    
    print(xiaoming.age)
    print(xiaoming.hello)
    
    del xiaoming.age

    示例2:setitem、getitem、delitem

    • 当对对象按照字典方式操作时,会自动触发相关方法

    • 示例:

      
      
      class Person:
          # 当对对象按照字典设置键值对时,会自动触发该方法
          def __setitem__(self, key, value):
              # print(key, value)
              self.__dict__[key] = value
      ​
          # 当对对象按照字典操作根据键获取值时,会自动触发该方法
          def __getitem__(self, item):
              # print(item)
              return self.__dict__[item]
      ​
          # 当做字典操作,删除键值对时,自动触发该方法
          def __delitem__(self, key):
              # print(key)
              del self.__dict__[key]
              
      p = Person()
      p['name'] = 'xiaoming'
      print(p['name'])
      ​
      # 通过字典方式添加的键值对,可以通过属性的方式获取
      print(p.name)
      print(p.dict)
      del p['name']
  • 相关阅读:
    codeforces #586 ABC~D
    codeforces #585 div2 ABCD
    编译原理实验 NFA子集法构造DFA,DFA的识别 c++11实现
    codeforces #599 div2 ABCD
    codeforces #598 div3 ABCDF
    codeforces #587 div3 ABCDE
    codeforces educational round 73 div2 ABCD
    Mud Puddles ( bfs )
    2019牛客多校第十场B.Coffee Chicken(递归)
    2019牛客多校训练第七场A. String(暴力)
  • 原文地址:https://www.cnblogs.com/kiki5881/p/8572636.html
Copyright © 2011-2022 走看看