ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python学习-Day30

2022-04-13 02:01:13  阅读:185  来源: 互联网

标签:__ obj name python self Day30 学习 单例 print


目录

image

今日内容详细

作业讲解

编写元类规定对象的所有数据值转大写
eg:
     obj.name = 'jason'
     print(obj.name)  # JASON

class MyTypeClass(type):
    def __call__(self, *args, **kwargs):
        args = [i.upper() for i in args]
        return super().__call__(*args, **kwargs)
class MyClass(metaclass=MyTypeClass):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def __setattr__(self, key, value):
        self.__dict__[key] = value.upper()

obj = MyClass('jason', 'male')
print(obj.name)
print(obj.gender)
obj.hobby = 'jdb'
print(obj.hobby)

image

设计模式

在IT行业中设计模式总共有23种 可以分为三大类

1.创建型
2.结构型
3.行为型

单例模式

单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。
当你希望在整个系统中,某个类只能出现一个实例时,就能派单例对象上场。 单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建

实现思想

单例模式的意思是一个类只能产生一个对象,用于节省资源

	第一次创建类的对象的时候判断系统是否已经有这个单例,如果有则返回,如果没有则创建。那么后续再次创建该类的实例的时候,因为已经创建过一次,就不能再创建新的实例,否则就不是单例,直接返回前面返回的实例即可。

编写

# 单例模式:(可以有很多种编写方式)

class Single(type):
    new_obj = None

    def __call__(self, *args, **kwargs):
        if not self.new_obj:
            obj = super().__call__(*args, **kwargs)
            self.new_obj = obj
            return self.new_obj
        return self.new_obj


class MyClass(metaclass=Single):
    def __init__(self, name):
        self.name = name


obj1 = MyClass('jason')
obj2 = MyClass('tony')
print(id(obj1), id(obj2))
print(obj1.__dict__, obj2.__dict__)


单例的实现方式并不固定 而是有很多种:https://www.cnblogs.com/Dominic-Ji/p/10525994.html

'''
    1、单例类只能有一个实例。
    2、单例类必须自己创建自己的唯一实例。
    3、单例类必须给所有其他对象提供这一实例。
  '''

image

pickle模块

只能在python中使用,只支持python的基本数据类型,是python独有的模块。序列化的时候,只是序列化了整个序列对象,而不是内存地址。

该模块可以在选课系统中使用

需求:将对象保存到文件 并且取出来之后还可以使用对象的功能
import pickle

class MyClass(object):
    school = 'school'
    def __init__(self, name):
        self.name = name
    def choose_course(self):
        print('%s正在选课'%self.name)
obj = MyClass('jason')
print(obj.school)
obj.choose_course()

# pickle可以
# with open(r'%s'%obj.name,'wb') as f:
#     pickle.dump(obj, f)

with open(r'jason','rb') as f:
    data = pickle.load(f)
print(data)
print(data.name)
print(data.school)

image

标签:__,obj,name,python,self,Day30,学习,单例,print
来源: https://www.cnblogs.com/GuoQQa/p/16138425.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有