魔术方法

一种特殊的方法而已

特点

不需要人工调用,在特定时刻自动触发执行

魔术方法种类

1.__init__初始化方法*******

触发时机:实例化对象之后触发
作用:为对象添加对象的所属成员
参数:self,接收当前对象,其他的参数根据实例化的传参决定
返回值:无
注意事项:无

# _author:"Ma ren"
# date: 2023/2/23 # __init__:初始化魔术方法 class Human:
# 属性
name = '张三'
age = 18
gender = 'male'
skin = 'yellow' # 方法
def __init__(self,name,gender,age): # name是__init__的形参
print('__init__方法被执行')
# print(self)
# 为对象添加成员
self.name = name # self.name中的name是对象的成员
self.gender = gender
self.age = age def eat(self):
print('吃饭方法') def run(self):
print('跑步方法') def sleep(self):
print('睡觉方法') # 实例化一个人的对象
h1 = Human('lxx','male',18) #<1.制作一个对象,2.为对象初始化操作>
print(h1.__dict__) # 打印对象成员

2.__new__构造方法

触发时机:实例化对象的时候触发
作用:管理控制对象的生成过程
参数:一个cls接收当前类,其他的参数根据实例化的参数决定
返回值: 可有可无 没有返回值 实例化结果为None
注意事项:__new__魔术方法跟__init__的魔术方法参数一致(除了第一个)

# _author:"Ma ren"
# date: 2023/2/23 # __new__构造方法 class Human:
# 属性
name = '张三'
age = 18
gender = 'male'
skin = 'yellow' # 方法
# 魔术方法
def __new__(cls, *args, **kwargs):
# print('__new__方法被触发')
# return 2
# 自己控制对象的生成(女的生,男的不生)
# print(args)
if '男' in args:
# 不生成对象
pass
else:
# 生成对象且返回
return object.__new__(cls) # object上帝之手 def eat(self):
print('吃饭方法') def run(self):
print('跑步方法') def sleep(self):
print('睡觉方法') h1 = Human('女') # 实例化对象【1.制作一个对象(new),2.初始化对象】
print(h1) # 利用__new__方法来一个狸猫换太子
# _author:"Ma ren"
# date: 2023/2/23 class Monkey:
pass class Human:
def __new__(cls, *args, **kwargs):
return object.__new__(Monkey)
pass # 看似使用人类造对象,实际却生成了一个猴子对象
human_obj = Human()
print(human_obj)

3.__del__析构方法

触发时机:对象被系统回收的时候触发
作用:回收系统使用过程中的信息和变量
参数:一个self接收当前对象
返回值:无
注意事项:无

# _author:"Ma ren"
# date: 2023/2/23 # __del__魔术方法 class Human:
# 属性
name = '张三'
age = 18
gender = 'male'
skin = 'yellow' # 方法 def eat(self):
print('吃饭方法') def run(self):
print('跑步方法') def sleep(self):
print('睡觉方法') # 析构方法
def __del__(self):
print('__del__方法被触发') h = Human()
print(h) # 主动删除对象
del h # 删除对象,系统回收对象
print('=================')

Python中的魔术方法大全的更多相关文章

  1. Python中的魔术方法详解

    介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中 ...

  2. Python中的魔术方法详解(双下方法)

    介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中 ...

  3. Python中的魔术方法

    什么是魔术方法? 在Python中,所有用"__"包起来的方法,都称为[魔术方法]. 魔术方法一般是为了让显示器调用的,你自己并不需要调用它们. __init__:初始化函数 这个 ...

  4. python的魔术方法大全

    在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”(魔术方法),例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中有相应描述,这 ...

  5. Python - 面向对象编程 - 魔术方法(双下划线方法)

    什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...

  6. Python 类的魔术方法

    Python中类的魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic method ...

  7. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  8. PHP中的面向对象OOP中的魔术方法

    一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...

  9. 巧用PHP中__get()魔术方法

    PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...

  10. Python中的__new__()方法与实例化

    @Python中的__new__()方法与实例化   __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...

随机推荐

  1. day18 批量查询与模糊查询 & 聚合函数与内置函数 & distinct关键字 & 分页查询limit & 排序order

    day18 两个表student和user student id s_name s_age s_sex user id u_name u_age u_sex 批量插入 insert into stud ...

  2. SpringBoot源码2——SpringBoot x Mybatis 原理解析(如何整合,事务如何交由spring管理,mybatis如何进行数据库操作)

    阅读本文需要spring源码知识,和springboot相关源码知识 对于springboot 整合mybatis,以及mybatis源码关系不密切的知识,本文将简单带过 系列文章目录和关于我 涉及到 ...

  3. 一篇文章教你实战Docker容器数据卷

    在上一篇中,咱们对Docker中的容器数据卷做了介绍.已经知道了容器数据卷是什么?能干什么用.那么本篇咱们就来实战容器数据卷,Docker容器数据卷案例主要做以下三个案例 1:宿主机(也就是Docke ...

  4. STM32基本定时器控制LED闪烁代码

    led.c #include "led.h" void LED_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2P ...

  5. nuxt.js中登录、注册(密码登录和手机验证码登录)

    <!-- 登录弹框 --> <div class="mask" v-show="flag"> <div class="m ...

  6. go语言的切片特性

    概述: 在使用切片进行赋值的时候,产生新的数组的指针指向原来的数组,只要修改新数组中的元素时,原来数组的元素也会改变. 测试代码: func TestSliceShareMemory(t *testi ...

  7. 一篇文章带你了解设计模式原理——UML图和软件设计原则

    一篇文章带你了解设计模式原理--UML图和软件设计原则 我们在学习过程中可能并不会关心设计模式,但一旦牵扯到项目和面试,设计模式就成了我们的短板 这篇文章并不会讲到二十三种设计模式,但是会讲解设计模式 ...

  8. [seaborn] seaborn学习笔记2-散点图Scatterplot

    2 散点图Scatterplot(代码下载) 散点图能够显示2个维度上2组数据的值.每个点代表一个观察点.X(水平)和Y(垂直)轴上的位置表示变量的值.研究这两个变量之间的关系是非常有用的.在seab ...

  9. [OpenCV实战]36 使用OpenCV在视频中实现简单背景估计

    目录 1 时间中值滤波 2 使用中值进行背景估计 3 帧差分 4 总结和代码 5 参考 许多计算机视觉应用中,硬件配置往往较低.在这种情况下,我们必须使用简单而有效的技术.在这篇文章中,我们将介绍一种 ...

  10. [OpenCV实战]30 使用OpenCV实现图像孔洞填充

    在本教程中,我们将学习如何填充二值图像中的孔.考虑下图左侧的图像.假设我们想要找到一个二值掩模,它将硬币与背景分开,如下图右侧图像所示.在本教程中,包含硬币的圆形区域也将被称为前景. 请注意,硬币的边 ...