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)
原文地址:https://www.cnblogs.com/gfhh/p/11661935.html