跟小罗学python看完这篇文章,你的Python基础就差不多了(附409集精品教程)( 九 )
注意:__new__ 是一个静态方法 , 在调用时需要 主动传递 cls 参数
本文插图
本文插图
5.3 Python 中的单例单例 —— 让 类 创建的对象 , 在系统中 只有 唯一的一个实例 定义一个 类属性 , 初始值是 None , 用于记录 单例对象的引用 重写 __new__ 方法 如果 类属性 is None , 调用父类方法分配空间 , 并在类属性中记录结果 返回 类属性 中记录的 对象引用
本文插图
本文插图
只执行一次初始化工作
在每次使用 类名() 创建对象时 , Python 的解释器都会自动调用两个方法: __new__ 分配空间 __init__ 对象初始化
在对 __new__ 方法改造之后 , 每次都会得到 第一次被创建对象的引用
但是:初始化方法还会被再次调用
需求让 初始化动作 只被 执行一次
解决办法
定义一个类属性 init_flag 标记是否 执行过初始化动作 , 初始值为 False
在 __init__ 方法中 , 判断 init_flag , 如果为 False 就执行初始化动作
然后将 init_flag 设置为 True
这样 , 再次 自动 调用 __init__ 方法时 , 初始化动作就不会被再次执行 了
本文插图
Tips
1、Python 能够自动的将一对括号内部的代码连接在一起:'''**需求***定义 `input_password` 函数 , 提示用户输入密码*如果用户输入长度
=8 , 返回输入的密码'''def input_password():# 1\. 提示用户输入密码pwd = input("请输入密码:")# 2\. 判断密码长度 , 如果长度 >= 8 , 返回用户输入的密码if len(pwd) >= 8:return pwd# 3\. 密码长度不够 , 需要抛出异常# 1> 创建异常对象 - 使用异常的错误信息字符串作为参数ex = Exception("密码长度不够")# 2> 抛出异常对象raise extry:user_pwd = input_password()print(user_pwd)except Exception as result:print("发现错误:%s" % result)
2、一个对象的 属性 可以是 另外一个类创建的对象 。 3、在__init__方法中定义类的属性时 , 如果 不知道设置什么初始值 , 可以设置为 None):None 关键字 表示 什么都没有 , 表示一个 空对象 , 没有方法和属性 , 是一个特殊的常量 。 可以将 None 赋值给任何一个变量 。 在 Python 中针对 None 比较时 , 建议使用is 判断
4、eval() 函数十分强大 —— 将字符串 当成 有效的表达式 来求值 并 返回计算结果
本文插图
在开发时千万不要使用 eval 直接转换 input 的结果 , 举个例子:看完这篇文章 , 你的Python基础就差不多了__import__('os').system('ls')# 等价代码import osos.system("终端命令")
推荐阅读
- 李玟|45岁李玟风格“释放天性”,当看完这组照片后,网友:真羡慕你老公!
- 胖小企鹅|看完这两点,我赶紧扔下手机去和宝宝聊聊天!
- 中小学▲小学生课上偷偷“传纸条”,被老师截胡,看完内容差点笑出鼻涕泡
- 开往未来的列车|对比iOS 14,为什么网友偏爱ColorOS?看完这几点发现后者真香
- 北石同学|为什么没人敢动孟婆?看完她的丈夫和父亲,你就懂了!,三界之中
- 悠家娱乐 VS Code 中的 Python 体验,#新闻拍一拍# 微软推出 Pylance,改善
- C罗|21世纪足坛最佳阵容出炉!梅罗+大罗小罗 巴萨皇马包揽11人
- 篮球怪谈|乔丹的小腿你就懂了,怎样才算得上是顶级的天赋?看完小卡的大手
- 篮球怪谈|乔、科、詹、库谁在中国的人气最高?看完他们的中国行你就懂了
- Python1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源
