zoukankan      html  css  js  c++  java
  • python----面向对象(2)

     反射

    class ClassA:
        name = 'xiaoming'
        def __init__(self):
            self.y = 'y'                        #先执行 __setattr__  在执行__getattribute__
            self.z = "z"
        def __getattribute__(self, item):       #只有点(.)才会触发此方法,a["dd"] 不会触发和getattr一样
            # print(item)
            if item == "y":                     # 每次访问属性之前都先执行此方法,可以自定义属性访问的权限
                pass
            else:
                return super().__getattribute__(item)   #必须加否则报错
    
        def __getattr__(self, item):
            pass                              #当访问的属性不存在的时候执行此方法注意:obj.__dict__['属性名']不会调用该属性"
        def __delattr__(self, item):
            del self.__dict__[item]
        def __setattr__(self, key, value):    #必须要有__setattr__方法
            self.__dict__[key] = value
    a = ClassA()
    print(a.name)  #xiaoming
    print(a.y)     #None
    print(a.z)     #z
    
    # 获取属性的三种方式
    # print(obj.name)
    # print(a.__dict__["y"])   #a.__dict__会触发__getattribute__ 但是["y"] 不会触发
    # getattr(obj,"name")

     getitem  settiem  deltiem

    如果想对实例进行 obj ["val"]、 del obj ["key"] 、obj ["key "] = "val" 操作,必须定义 getitem  settiem  deltiem 方法。否则只能通过点( . ) 属性名来进行一系列操作

    class WPUnit(object):
        def __setitem__(self, key, value):
            self.__dict__[key] = value
        def __getitem__(self, key):
            if key in self.__dict__:
                return self.__dict__[key]
            else:
                r = ""
                self.__setitem__(key, r)
                return None
        def __delitem__(self, key):
            del self.__dict__[key]
    a = WPUnit()
    a["name"]="xiaoming"
    print(a.name)              #xiaoming
    print(a["name"])          #xiaoming
    print(a.__dict__)          #{'name': 'xiaoming'}
    del a["name"]
    print(a.__dict__)
  • 相关阅读:
    【转】海量数据处理算法-Bloom Filter
    【c++】【转】结构体字节对齐
    【APUE】信号量、互斥体和自旋锁
    【python】Python的字典get方法:从字典中获取一个值
    【python】Python中*args 和**kwargs的用法
    【python】super()
    【algorithm】尾递归
    什么时候必须使用初始化列表
    【APUE】wait与waitpid函数
    【APUE】孤儿进程与僵死进程
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10500635.html
Copyright © 2011-2022 走看看