python之对象管理

对象的创建

  1. object类中的__ new __()方法
    object类中的 __ new __()方法完成对象创建过程中的内存空间申请,对象属性初始化等一系列的操作。
    (虽然我们在创建对象的时候没有写 __new __()方法,但是系统会在创建对象的时候调用object类中的__new __()方法)
  2. __ new __()方法的使用
    __ new __ ()方法用于定义创建对象时执行的操作, __ new __ ()方法仅仅为用户提供一个创建对象时干预的入口,真正执行创建对象的操作由object类中的 __ new __()方法完成
  3. __ new __()的定义
    定义 __ new __()方法是对object类中 __ new __()方法的重写,重写该方法时必须再次调用object类中的 __ new __()方法
# 定义
def __new__(cls,*args,**kwargs):
  # 用户自定义操作内容
  ...
  #创建对象由object完成,需要指定创建的类名称
  instance = object.__new__(类名)
  # 返回创建的对象
  return instance
  1. 注意事项
  • __ new __()方法在创建对象时自动运行,无需手工执行调用该方法
  • 覆盖object类中的__ new __()方法后创建对象将执行覆盖后的方法
  • __ new __()方法仅仅是python开放出来给用户干预创建对象时的一个操作入口,该方法并不是直接完成分配内存、创建对象的操作,创建对象的操作由python底层统一管理

对象的删除

  1. del的作用
    del操作的实质是断开变量与内存数据之间的引用,操作del执行后等同于对应变量未进行过定义
  2. del操作执行范围
  • 删除定义的变量:功能等同于变量未定义
    在这里插入图片描述
  • 删除容器中的数据:将数据按照变量的形式看待,功能等同于未定义过对应数据
    在这里插入图片描述
    在这里插入图片描述
  • 对象中的属性:对应对象等同于该对象未定义过该属性
    在这里插入图片描述
  1. __ del __方法的作用
    __ del 方法用于定义对象不存在任何引用时执行的操作。当对象断开了与最后一个变量之间的引用关系时,将执行该对象的 new __方法
  2. __ del __方法的执行范围
  • 当手工执行断开变量与对象的最后一个引用时执行,即del操作
  • 当程序执行完毕时,所有变量对应的引用都断开,此时执行,即退出程序
  1. __ del __方法的调用
    __ del __方法在对象断开与最后一个变量之间的引用关系时自动执行,无需手工执行调用该方法

对象判等

  1. 概念
    当两个对象对应的引用地址相同时,称这两个对象是同一个对象
  2. 语法
# 对象引用地址判等
对象名 is 对象名
# 或者
变量名 is 变量名

# 数据引用地址判等
数据 is 数据

# 注意!!!
# 判等操作的结果是True或False
  1. == 与 is 的区别
  • ==操作针对判定的内容不同,规则不同。例如:数值性数据比较数值的大小,不考虑是整数还是小数;字符串比较字符串的内容是否相同,不考虑引用地址是否相同
  • is 操作只针对地址进行判定,只要地址相同即返回True,否则返回False

单例模式

  1. 单例模式的作用
    控制一个类只能创建出单个实例对象
  2. 语法
class 类名:
  __instance = None
  def __new__(cls,*args,**kwargs):
    if cls.__instance is None:
      cls.__instance=object.__new__(类名)
    return cls.__instance    
  1. 注意事项
  • 定义的类变量要进行私有化,否则可以通过类名在类的外部访问到
  • 对象的判空操作使用is进行判定

案例

"""
办公室打印机:
一台打印机可以服务办公室中所有人,完成他们的打印任务
 打印机:添加打印任务,真正的打印操作
 经理:将要打印的操作加入打印机中
 员工:将要打印的操作加入打印机中
 """
# 经理类
class Manager:
    def use_printer(self,info,pr):
        pr.add_task(info)

# 员工类
class Staff:
    def use_printer(self,info,pr):
        pr.add_task(info)

# 打印机类
class Printer:
    __instance=None
    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance=object.__new__(Printer)
        return cls.__instance

    def __init__(self,list_print=[]):
        self.list_print=list_print

    def add_task(self,info):
        self.list_print.append(info)

    def print(self):
        print(self.list_print)

# 经理a
m1=Manager()
pr1=Printer()
m1.use_printer("I am m1.",pr1)

# 员工b
s1=Staff()
pr2=Printer()
s1.use_printer("I am s1.",pr2)

pr=Printer()
pr.print()

# 打印结果:['I am m1.', 'I am s1.']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的小强呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值