zoukankan      html  css  js  c++  java
  • day22

    classmethod

    翻译:一个类方法

    ​ classmethod是一个装饰器,可以装饰给类内部的方法,使该方法绑定给类来使用

    ​ 对象的绑定方法特殊之处

    ​ 由对象来调用,会将对象当作第一个参数传给该方法

    ​ 类的绑定方法特殊之处

    ​ 由类来调用,会将类当作第一个参数传给该方法

    staticmethod

    ​ staticmethod是一个装饰器,可以装饰给类内部的方法,使该方法既不绑定给对象,也不绑定给类

    面向对象高级

    1. isinstance

      __class__:对象的属性,获取该对象当前的类

      ​ isinstance(参数1,参数2):

      ​ python内置的函数,可以传入两个参数,用于判断参数1是否是参数2的一个实例

      判断一个对象是否是一个类的实例

    2. issubclass

      issubclass(参数1,参数2)

      ​ python内置函数,可以传入两个参数,用户判断参数1是否是参数2的子类

      判断一个类是否是另一个类的子类

    反射

    ​ 指的是通过“字符串”对 对象或者类的属性进行操作。

    —hasattr:通过字符串,判断该字符串是否是对象或类的属性

    —getattr:通过字符串,获取对象或类的属性

    —setattr:通过字符串,设置对象或类的属性

    —delattr:通过字符串,删除对象或类的属性

    魔法方法

    ​ 凡是在类内部定义,以__开头__结尾的方法都称之为魔法方法,又称“类的内置方法”

    ​ 魔法方法会在某些条件成立时触发

    __init__:在调用类时触发

    __str__:会在打印对象时触发

    __del__:对象被销毁前执行该方法,该方法会在最后执行

    __getattr__:会在对象.属性时,“属性没有”的情况下才会触发

    ​ 默认返回None,若想打印属性的结果,必须return一个值

    __setattr__:会在“对象.属性=属性值”时触发

    ​ 注意:执行该方法时,外部“对象.属性=属性值”时无效

    __call__:会在对象被调用时触发

    __new__:会在__init__执行前触发

    单例模式

    面试题

    单例模式指的是单个实例,实例指的是调用类产生的对象

    实例化多个对象会产生不同的内存地址,单例可以让所有的调用者

    在调用产生对象的情况下都指向同一个内存地址。例如:打开文件

    单例的目的:

    ​ 为了减少内存的占用

    '''
    从配置文件中获取相同的文件名
    新建一个文件,随便写入一些内容
    文件名xxx.txt
    '''
    class File:
    
        __instance = None
    
    #单例方式1
        @classmethod
        def singleton(cls,file_name):
            if not cls.__instance:
                obj = cls(file_name)
                cls.__instance = obj
            return cls.__instance
            
    #单例方式2
        def __new__(cls,*args,**kwargs):
            if not cls.__instance:
                cls.__instance=object.__new__(cls)
            return cls.__instance
    
        def __init__(self,file_name,mode='r',encoding='utf-8'):
            self.file_name=file_name
            self.mode = mode
            self.encoding = encoding
    
        def open(self):
            self.f = open(self.file_name,self.mode,encoding=self.encoding)
    
        def read(self):
            res = self.f.read()
            print(res)
    
        def close(self):
            self.f.close()
    
    #方式1:
    # obj1 = File.singleton(xxx.txt)#singleton(cls)
    # obj2 = File.singleton(xxx.txt)#singleton(cls)
    # obj3 = File.singleton(xxx.txt)#singleton(cls)
    obj1 = File(xxx.txt)
    obj2 = File(xxx.txt)
    obj3 = File(xxx.txt)
    print(obj1)
    print(obj2)
    print(obj3)
    
    # 方式2
    obj1 = File(xxx.txt)#singleton(cls)
    obj2 = File(xxx.txt)#singleton(cls)
    obj3 = File(xxx.txt)#singleton(cls)
    print(obj1)
    print(obj2)
    print(obj3)
    
  • 相关阅读:
    61组第二次团队作业
    饮水机电路图工作原理及电路图分析
    七种基础模拟电路的用法
    C语言判断一个数是奇数还是偶数
    F28335 UART串口配置及数据发送
    F28335 SPI配置及收发数据
    电容的九大功能
    查询接口---flask+python+mysql
    python参数传递
    java基础
  • 原文地址:https://www.cnblogs.com/gfhh/p/11661935.html
Copyright © 2011-2022 走看看