专栏首页Gvoidy备份小站Python 中的魔术方法

Python 中的魔术方法

构造与初始化

__new__(self): 创建并返回一个类的实例,而__init__只是将传入的参数来初始化该实例,一般不需要重载__new__方法除非希望控制类的创建。

__init__(self): 可以理解为构造函数,将传入的参数初始化成实例

__del__(self): 可以理解为析构函数

属性访问控制

Python缺少对于类的封装,但人们希望Python能够定义私有属性,然后提供公共可访问的gettersetter。 Python其实可以通过魔术方法来实现封装。

__getattr__(self, name): 该方法定义了你试图访问一个不存在的属性时的行为。因此,重载该方法可以实现捕获错误拼写然后进行重定向, 或者对一些废弃的属性进行警告。 也可用于访问私有属性

__setattr__(self, name, value): 是实现封装的解决方案,它定义了你对属性进行赋值和修改操作时的行为。 不管对象的某个属性是否存在,它都允许你为该属性进行赋值,因此你可以为属性的值进行自定义操作。有一点需要注意,实现__setattr__时要避免”无限递归”的错误。

def __setattr__(self, name, value):
    self.name = value
    # 每一次属性赋值时, __setattr__都会被调用,因此不断调用自身导致无限递归了。

正确为:

def __setattr__(self, name, value):
    self.__dict__[name] = value

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 常见设计模式 Python 实现

    单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类 “类 (计算机科学)”)必须保证只有一个实例存在。许多时候整个系统只需要拥有一...

    Ewdager
  • Python 单链表实现&基础函数

    前两天面滴滴,被问到怎么判断两个链表是否相交,然后并不懂什么是单链表相交…就很尴尬。 赶紧复习一下单链表的知识。

    Ewdager
  • Python读取Excel文件sheet名性能优化

    直接使用pandas读取整个Excel文件,再从中取列名。这种场景对于小的Excel文件还适用,但数据量上升到10M+时,取个sheet name要26s之久。...

    Ewdager
  • Objective-C中的属性机制

            Objective-C 2.0中的属性机制为我们提供了便捷的获取和设置实例变量的方式,也可以说属性为我们提供了一个默认的设置器和访问器的实现。在...

    lizelu
  • IOS UIResponder 触碰拖动图像

    override func touchesMoved(_ touches:Set<UITouch>, with event:UIEvent?) { //需要先...

    用户5760343
  • 三场沙龙直播,解析“新基建”如何助力实体经济

    欢迎关注公众帐号“鹅厂网事”,我们给你提供最新的行业动态信息、腾讯网络最接地气的干货分享。 注1:凡注明来自“鹅厂网事”的文字和图片等作品,版权均属于“深圳市...

    鹅厂网事
  • 汇编语言-第三章 寄存器(栈存储)

    青木
  • 腾讯青少年科技学院开启“云见习”,解锁多样化互联网职业体验!

    ? 青春须早为。曾经的你是否有着成为老师、警察、律师甚至是航天员的梦想?随着科技发展,互联网产业应运而生,世界这么大,如今的青少年对自己未来的职业发展也有了更...

    鹅老师
  • 面向对象初识

    面向对象编程 —— Object Oriented Programming 简写 OOP

    py3study
  • Velocity模版自定义标签

    加上 <property name="toolboxConfigLocation" value="/WEB-INF/velocity-toolbox.xml"...

    試毅-思伟

扫码关注云+社区

领取腾讯云代金券