首页 > 编程语言 > 详细

python面型对面(2)

时间:2019-03-09 15:50:13      阅读:136      评论:0      收藏:0      [点我收藏+]

 反射

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")

 

python面型对面(2)

原文:https://www.cnblogs.com/yanxiaoge/p/10500635.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!