zoukankan      html  css  js  c++  java
  • 面向对象的反射和双下方法(魔术方法)

    反射:

    通过字符串操作对象相关属性.

     1 class Text:
     2     def __init__(self,name,age):
     3         self.name = name
     4         self.age = age
     5     def func(self):
     6         print(123)
     7     def func1(self):
     8         return self
     9 
    10 text = Text("小明",18)
    11 print(hasattr(text,"func"))             # 查看对象是否具有属性或方法,返回布尔值
    12 getattr(text,"func")()                  # 获取对象属性的值,或者方法的空间地址(可直接调用)
    13 setattr(text,"name","小红")               # 设置对象的属性
    14 print(text.name)
    15 delattr(text,"name")                      # 删除对象的属性
    16 print(text.__dict__)

    结果对照:

    1 True
    2 123
    3 小红
    4 {'age': 18}

    双下(魔术)方法:

    定义:双下方法是特殊方法,他是解释器提供的,是 __方法名__形式的具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码..

     1 class A:
     2     def __init__(self):         # 给一个对象封装属性
     3         pass
     4     def __new__(cls, *args, **kwargs):          # python真正的构造函数,为对象开辟空间,不写查找object的__new__
     5         pass
     6     def __len__(self):                      # 对一个对象执行len()操作就会触发__len__方法
     7         pass
     8     def __call__(self, *args, **kwargs):        # 对一个对象进行调用操作(后面加括号),就会触发__call__方法
     9         pass
    10     def __repr__(self):                 # 对象中存在__repr__方法,打印时默认触发..对对象执行repr()方法时候会触发__repr__方法
    11         pass
    12     def __str__(self):                  # 对象中存在__str__方法,打印时默认触发..执行str()也会触发(__str__和__repr__同时存在时,默认str)
    13         pass
    14     def __hash__(self):                 # 对对象执行hash()操作的时候会触发__hash__方法,可指定返回值(__new__存在时返回值不是指定的)
    15         pass
    16     def __eq__(self, other):            # 当对对象执行等于或不等于操作的时候,就会触发__eq__方法,返回布尔值
    17         pass
    18     def __del__(self):                  # 当一个对象从内存中清除的时候,实际是触发了__del__方法
    19         pass
    20     def __enter__(self):                # python的上下文管理方法
    21         pass
    22     def __exit__(self, exc_type, exc_val, exc_tb):      # __exit__与__enter__需同时存在,就可以对对象使用with操作
    23         pass
    24     def __setattr__(self, key, value):      # 设置对象属性时触发
    25         pass
    26     def __getattr__(self, item):            #   获取对象属性时触发
    27         pass
    28     def __delattr__(self, item):            #  删除对象属性时触发
    29         pass
    30     def __setitem__(self, key, value):      #   对对象进行类似字典的赋值操作时
    31         pass
    32     def __getitem__(self, item):            #   对对象进行类似字典的获取操作时
    33         pass
    34     def __delitem__(self, key):             #   对对象进行类似字典的删除操作时
    35         pass
  • 相关阅读:
    一次关于聚合根的激烈讨论
    基于 abp vNext 和 .NET Core 开发博客项目
    PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型
    DOCKER 学习笔记9 Kubernetes (K8s) 弹性伸缩容器 下
    DOCKER 学习笔记8 Docker Swarm 集群搭建
    DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结
    DOCKER 学习笔记6 WINDOWS版尝鲜
    DOCKER 学习笔记5 Springboot+nginx+mysql 容器编排
    DOCKER 学习笔记4 认识DockerCompose 多容器编排
    DOCKER 学习笔记3 使用Docker部署SpringBoot
  • 原文地址:https://www.cnblogs.com/NoteBook3013/p/10344009.html
Copyright © 2011-2022 走看看