Python 部分魔术方法Magit Method

本文介绍了Python的魔术方法,包括实例创建与销毁、属性管理、集合相关和上下文管理等。魔术方法如`__init__`、`__del__`、`__getattr__`、`__setattr__`、`__delattr__`等在特定时刻自动执行,用于扩展对象的行为。文章还探讨了描述符的概念以及如何使用魔术方法实现自定义容器和上下文管理。
摘要由CSDN通过智能技术生成

魔术方法不过是一种特殊的方法,它不需要人工调用,在特定的时刻会自动执行。
比如像a-b其实"魔术"般地执行了a.__sub__(b),像__sub__这样的以"__"双下划线包起来的方法,都统称魔术方法。

魔术方法的分类

魔法方法大致可以分为两类:与运算符相关以及与运算符无关的,而两大类下还有很多小类
1、与运算符相关的魔术方法很简单,即触发条件为运算符
http://5b0988e595225.cdn.sohucs.com/images/20180517/3361a7c7ad4b4186b2f63d3f71a4a5c2.jpeg
2、而与运算符无关的才是我们需要着重关心的地方,也就是说以下才是你能秀起来的魔术方法
在这里插入图片描述

实例创建和销毁
  • Python中构造一个实例其实分为两步:__new__用来创建类并返回这个类的实例, 然后__init__将传入的参数来初始化该实例,可以说这两个方法共同构成了"构造函数"

1、__init__通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后,所以不需要返回值。它是实例级别的方法。
2、__new__通常用于控制生成一个新实例的过程,所以必须要有返回值。它是类级别的方法

使用__new____init__来实现单例模式:

import threading
class Singleton(object):
    _instance_lock = threading.Lock()

	#初始化实例
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

	#创建类实例
    def __new__(cls, arg1, arg2):
        with Singleton._instance_lock:
            if not hasattr(Singleton, "_instance"):
				#由于重写了__new__所以要调用父类的方法达到原本的效果
                Singleton._instance = object.__new__(cls) 
        return Singleton._instance

obj1 = Singleton
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值