前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 中的魔术方法

Python 中的魔术方法

作者头像
Ewdager
发布2020-07-14 14:20:38
6680
发布2020-07-14 14:20:38
举报
文章被收录于专栏:Gvoidy备份小站Gvoidy备份小站

构造与初始化

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

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

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

属性访问控制

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

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

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

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

正确为:

代码语言:javascript
复制
def __setattr__(self, name, value):
    self.__dict__[name] = value
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构造与初始化
  • 属性访问控制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档