「」看完这篇文章,你的Python基础就差不多了( 九 )


文章图片

文章图片

「」看完这篇文章,你的Python基础就差不多了
文章图片

文章图片

5.3 Python 中的单例单例 —— 让 类 创建的对象 , 在系统中 只有 唯一的一个实例 定义一个 类属性 , 初始值是 None , 用于记录 单例对象的引用 重写 __new__ 方法 如果 类属性 is None , 调用父类方法分配空间 , 并在类属性中记录结果 返回 类属性 中记录的 对象引用
「」看完这篇文章,你的Python基础就差不多了
文章图片

文章图片

「」看完这篇文章,你的Python基础就差不多了
文章图片

文章图片

只执行一次初始化工作
在每次使用 类名() 创建对象时 , Python 的解释器都会自动调用两个方法: __new__ 分配空间 __init__ 对象初始化
在对 __new__ 方法改造之后 , 每次都会得到 第一次被创建对象的引用
但是:初始化方法还会被再次调用
需求让 初始化动作 只被 执行一次
解决办法
定义一个类属性 init_flag 标记是否 执行过初始化动作 , 初始值为 False
在 __init__ 方法中 , 判断 init_flag , 如果为 False 就执行初始化动作
然后将 init_flag 设置为 True
这样 , 再次 自动 调用 __init__ 方法时 , 初始化动作就不会被再次执行 了
「」看完这篇文章,你的Python基础就差不多了
文章图片

文章图片

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() 函数十分强大 —— 将字符串 当成 有效的表达式 来求值 并 返回计算结果
「」看完这篇文章,你的Python基础就差不多了
文章图片

文章图片

在开发时千万不要使用 eval 直接转换 input 的结果 , 举个例子:__import__('os').system('ls') # 等价代码 import os os.system("终端命令")


推荐阅读