5.28 Day22

一 多态
多态 : 不同的子类对象,调用相同的父类方法,产生了不同的执行结果

二.单态
单态(例)模式 : 无论实例化多少次,都有且只有一个对象

目的意义:为了节省内存空间,仅仅是为了调用类中的成员,不需要额外给该对象添加任何成员,这个场景,使用单态.
比如:操作数据库的增删改查这样的类,是不需要的.


(1) 基本语法
class Singleton():
      __obj = None
      def __new__(cls):
            if cls.__obj is None:
                  cls.__obj = object.__new__(cls)
             return cls.__obj

三.__new__ 魔术方法

触发时机:实例化类生成对象的时候触发(触发时机在__init__之前)
功能:控制对象的创建过程
参数:至少一个cls接受当前的类,其他根据情况决定
返回值:通常返回对象或None

(1) 基本语法
class MyClass():
  a = 1

obj = MyClass()
print(obj)


class MyClass1(object):
  def __new__(cls):
    print(cls)
    # (1)借助父类object 类.方法()
    # obj = object.__new__(cls)
    # 返回本类自己的对象
    # return obj
    # (2)返回其他类的对象
    # return obj
    # (3)不返回任何对象
    return None

2.new方法的触发时机要快于init
__new__ 用来创建对象
__init__ 用来初始化对象(前提的有对象)
先创建对象,再去初始化对象,所以new快于init

注意事项:如果返回的不是本类的对象,不会触发__init__构造方法

猜你喜欢

转载自www.cnblogs.com/cloudlzh/p/12983891.html