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__)
  • 相关阅读:
    会计日历-自动生成脚本
    Oracle Key Flexfields Qualifiers
    Form Personalization应用总结
    UltraEdit (Ctrl + F) 查找、(Ctrl + R)替换功能失效
    FORM Save : ORA-01403 FRM-40735 ORA-06502
    EBS R12 Vision Profile default value
    EBS增加客制应用CUX:Custom Application
    TortoiseSVN设置比较工具为BeyondCompare
    开源的文件比较工具:WinMerge,KDiff3,diffuse
    C++ Operator Overloading
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10500635.html
Copyright © 2011-2022 走看看