IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 34.Python面向对象(七)【单例模式&Enum枚举类】 -> 正文阅读

[Python知识库]34.Python面向对象(七)【单例模式&Enum枚举类】

每篇前言:


在这里插入图片描述

Python面向对象(四)

认真看了前面文章的小伙伴可能会有疑问,我前面不是讲过单例模式了吗?这是不是孤寒者给弄混了。
其实不然,有很多重要的知识点,我都是一遍又一遍的穿插讲解,就是想要引起大家的重视,让大家牢牢记在心中!
所以看这个知识点之前凭借自己的印象,看看能不能自己码出一个单例类!看看自己还能记住多少!

1.1 单例模式

  • 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。
# -*- coding: utf-8 -*-
"""
__author__ = 小小明-代码实体
"""
# 实例化一个单例
class Singleton(object):
    __instance = None

    def __new__(cls, age, name):
        # 判断类有没有实例化对象
        # 如果没有就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时
        # 能够知道之前已经创建过对象了,这样就保证了只有1个对象
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

a = Singleton(18, "dongGe")
b = Singleton(8, "dongGe")

print(id(a), id(b))

a.age = 19  # 给a指向的对象添加一个属性
print(b.age)  # 获取b指向的对象的age属性

在这里插入图片描述

  • 创建单例时,只执行1次__init__方法:
# -*- coding: utf-8 -*-
"""
__author__ = 小小明-代码实体
"""
class Singleton(object):
    __instance = None
    __first_init = False

    def __new__(cls, age, name):
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self, age, name):
        if not self.__first_init:
            self.age = age
            self.name = name
            Singleton.__first_init = True

    def __str__(self):
        return "Singleton[%s,%s]" % (self.name, self.age)


a = Singleton(18, "dongGe")
b = Singleton(8, "dongGe")

print(id(a), id(b))
print(a.age, b.age)
print(a, b)

在这里插入图片描述

2.1 Enum枚举类

  • 基本实现:
from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
  • 这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:
for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

在这里插入图片描述

  • value属性则是自动赋给成员的int常量,默认从1开始计数。
  • 如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:
# -*- coding: utf-8 -*-
"""
__author__ = 小小明-代码实体
"""
from enum import Enum, unique


@unique
class Weekday(Enum):
    Sun = 0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6


for name, member in Weekday.__members__.items():
    print(name, '=>', member, ',', member.value)

在这里插入图片描述

  • @unique装饰器可以帮助我们检查保证没有重复值。
  • 访问这些枚举类型可以有若干种方法:
Weekday = Enum('Weekday', ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"))
for i in range(1,8):
    print(i,Weekday(i),Weekday(i).name)
print(Weekday.Tue)
print(Weekday['Tue'])
print(Weekday.Tue.value)
print(Weekday(1))

在这里插入图片描述

  • 可见,既可以用成员名称引用枚举常量,又可以直接根据value的值获得枚举常量。

  • 交通灯示例:

# -*- coding: utf-8 -*-
"""
__author__ = 小小明-代码实体
"""
from enum import Enum, unique

@unique
class TrafficLamp(Enum):
    RED = 60
    GREEN = 45
    YELLOW = 5

    def next(self):
        if self.name == 'RED':
            return TrafficLamp.GREEN
        elif self.name == 'GREEN':
            return TrafficLamp.YELLOW
        elif self.name == 'YELLOW':
            return TrafficLamp.RED

current = TrafficLamp.RED
for i in range(10):
    print(current, current.value)
    current = current.next()

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:00:11  更:2022-08-19 19:04:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:47:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码