• 描述符


     1 class Type:
     2     def __init__(self,key):
     3         self.key = key
     4 
     5     def __get__(self, instance, owner):
     6         print('执行get方法')
     7         return instance.__dict__[self.key]
     8 
     9     def __set__(self, instance, value):
    10         print('执行set方法')
    11         instance.__dict__[self.key] = value
    12 
    13     def __delete__(self, instance):
    14         instance.__dict__.pop(self.key)
    15 class Foo:
    16     name = Type('name')
    17 
    18     def __init__(self, name):
    19         self.name = name
    20 
    21 
    22 f1 = Foo('alex')
    23 f1.name = 2
    24 print(f1.__dict__)
    25 print(f1.name)
    26 输出:
    27 执行set方法
    28 执行set方法
    29 {'name': 2}
    30 执行get方法
    31 2

    可以对赋值加上条件判断

     1 class Type:
     2     def __init__(self,key):
     3         self.key = key
     4 
     5     def __get__(self, instance, owner):
     6         print('执行get方法')
     7         return instance.__dict__[self.key]
     8 
     9     def __set__(self, instance, value):
    10         print('执行set方法')
    11         if not isinstance(value,str):
    12             # print('你传入得不是字符串')
    13             raise TypeError('你传入的不是字符串')
    14         instance.__dict__[self.key] = value
    15 
    16     def __delete__(self, instance):
    17         instance.__dict__.pop(self.key)
    18 class Foo:
    19     name = Type('name')
    20 
    21     def __init__(self, name):
    22         self.name = name
    23 
    24 
    25 f1 = Foo(3)
    26 # f1.name = 2
    27 # print(f1.__dict__)
    28 # print(f1.name)
    29 输出:
    30 执行set方法
    31 Traceback (most recent call last):
    32   File "C:/Users/Administrator/Desktop/python/3月12日/描述符应用.py", line 25, in <module>
    33     f1 = Foo(3)
    34   File "C:/Users/Administrator/Desktop/python/3月12日/描述符应用.py", line 22, in __init__
    35     self.name = name
    36   File "C:/Users/Administrator/Desktop/python/3月12日/描述符应用.py", line 13, in __set__
    37     raise TypeError('你传入的不是字符串')
    38 TypeError: 你传入的不是字符串
  • 相关阅读:
    NLP预训练模型+模型蒸馏与压缩
    treevalue——Master Nested Data Like Tensor
    vuecli项目根据线上环境分别打出测试包和生产包
    vue中移动端禁止页面滚动
    Iframe高度自适应
    Windows激活工具《KMS》
    使用宝塔面板部署商城项目到云服务器的案例
    电脑软件卸载神器
    react主动调用input file选择文件
    20192429马一 202120222 《汇编语言程序设计》前四章学习报告
  • 原文地址:https://www.cnblogs.com/ch2020/p/12484929.html
Copyright © 2020-2023  润新知