• 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__)
  • 相关阅读:
    MyBatis学习之输入输出类型
    MyBatis学习之多表查询
    javascript学习之this
    Elasticsearch学习之Java操作1
    CSS学习之定位
    CSS学习之浮动
    CSS学习之盒子模型
    java学习之导出Excel
    转载:手把手教你做iOS推送
    拳头公司聊天服务架构:服务器篇
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10500635.html
Copyright © 2020-2023  润新知