首页 > 其他 > 详细

继承的方式完成包装

时间:2019-03-27 10:48:47      阅读:150      评论:0      收藏:0      [点我收藏+]

1.__getattr__

class Foo:
    def __init__(self,name):
        self.name=name

    # def __getattr__(self, item):
    #     print(‘你找的属性%s不存在‘%item)

f1=Foo(alex)
print(f1.name)      #alex
print(f1.age)       #报错:AttributeError: ‘Foo‘ object has no attribute ‘age‘
#类Foo本身就有内置函数__getattr__,当在类中又定义了一个__getattr__时,则执行的是新定义的

2.__setattr__

技术分享图片
# class Foo:
#     def __init__(self,name):
#         self.name=name
#
#     def __setattr__(self, key, value):
#         print(‘执行__setattr__‘)
#
# f1=Foo(‘alex‘)             # 执行__setattr__
# print(f1.__dict__)          #{}
# #执行了自己定义的__setattr__,并不会真正往字典属性里传值


#要求:往字典属性里传值,值必须是str类型
class Foo:
    def __init__(self,name):
        self.name=name

    def __setattr__(self, key, value):
        print(执行__setattr__)
        if type(value) is str:
            print(开始设置属性)
            # self.key=value          #又触发__setattr__
            self.__dict__[key]=value
        else:
            print(必须是字符串类型)

f1=Foo(alex)             # 执行__setattr__
f1.age=18
print(f1.__dict__)          #{}
View Code

 3.__delattr__

技术分享图片
class Foo:
    def __init__(self,name):
        self.name=name

    def __delattr__(self, item):
        print(执行__delattr__)
        # f1.__dict__.pop(item)           #这样才会真正的删除

f1=Foo(alex)
f1.age=18
print(f1.__dict__)          #{‘name‘: ‘alex‘, ‘age‘: 18}
del f1.age                  #执行__delattr__
print(f1.__dict__)          #{‘name‘: ‘alex‘, ‘age‘: 18}
View Code

 

继承的方式完成包装

原文:https://www.cnblogs.com/wuweixiong/p/10605829.html

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