「」看完这篇文章,你的Python基础就差不多了( 九 )
文章图片
文章图片
文章图片
文章图片
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 ex try: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 的结果 , 举个例子:__import__('os').system('ls') # 等价代码 import os os.system("终端命令")
。
推荐阅读
- 「」哪家18W PD快充方案最受欢迎?看完这个报告秒懂
- 「」高盛预计 iPhone 12 将延迟到 11 月初推出
- 「年度」年度旗舰∶Oneplus 8 Pro
- 「屏幕」华为正研究两款透过滑屏增大屏幕的手机
- 『』新家装不是“避风港”,而是“出海口”
- 【】人工智能突破三维矢量全息新技术
- ##冒用绍兴公司名头 这个虚假理财平台骗了不少人
- 「地球」距离地球630光年的地方,下起了“铁雨”
- ##发力智慧商业 云从科技与红星云计算达成战略合作
- 「」什么是基础架构即代码和平台即代码?看完就清楚了
