魔术方法

一种特殊的方法而已

特点

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

魔术方法种类

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('=================')

最新文章

  1. WordPress插件--WP BaiDu Submit结构化数据插件又快又全的向百度提交网页
  2. jquery去掉或者替换字符,设置指定options为selected状态
  3. (C/C++) memset
  4. HDU 2897 邂逅明下(巴什博奕)
  5. 用JDBC查询数据库
  6. [z]CAP原理和BASE思想
  7. CSS之导航菜单
  8. csuoj1009
  9. Go channel实现源码分析
  10. (71)Wangdao.com第十一天_JavaScript 数学对象 Math
  11. 我的集合学习笔记--ArrayList
  12. Mabatis三剑客分别是:mybatis-generator、mybatis-plugin、mybatis-pagehelper
  13. android判断adb调试是否打开及代码跳转到开发者选项界面
  14. 什么是DevOps?DevOps简明教程
  15. innodb_locks_unsafe_for_binlog分析
  16. 【error】select timeout问题
  17. hdu5833----高斯消元
  18. Java Http接口加签、验签操作方法
  19. 问题:从键盘读取特定类型的数据(使用Scanner读取int类型)
  20. PyQt 5控件

热门文章

  1. 解决redmi airdots 2右耳充不进电,灯不亮
  2. Js前端导出csv
  3. 【每日一题】2022年2月10日-NC160 二分查找-I
  4. 【消息队列面试】15-17:高性能和高吞吐、pull和push、各种MQ的区别
  5. Redis如何模糊匹配Key值
  6. java初级开发面试题
  7. 企业应用架构研究系列二十五:IdentityServer4 认证服务搭建
  8. Spring 和 Spring MVC的区别
  9. Java学习笔记:2022年1月6日(补充)
  10. 01-逻辑仿真工具VCS使用