Fork me on GitHub

day 22

day22

1.classmethod(******)

    classmethod是一个装饰器,可以装饰给类内部的方法,使该方法绑定给类来使用。
        - 对象的绑定方法特殊之处
            由对象来调用,会将对象当作第一个参数传给该方法。

        - 类的绑定方法特殊之处
            由类来调用,会将类当作第一个参数传给该方法。

2.staticmethod(******)

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

3.面向对象高级:

  • isinstance(*****)

    - isinstance(参数1, 参数2):
        python内置的函数,可以传入两个参数,用于判断参数1是否是参数2的一个实例。
    
        **** 判断一个对象是否是一个类的实例。
    
  • issubclass(*****)

 ```
 - issubclass(参数1, 参数2):
     python内置的函数,可以传入两个桉树,用与判断参数1是否是参数2的子类。
 
     ***判断一个类是否是另一个类的子类
 ```
  • 反射(*******):

    反射: 指的是通过“字符串”对 对象或类的属性进行操作。
        - hasattr: 通过字符串,判断该字符串是否是对象或类的属性。
        - getattr: 通过字符串,获取对象或类的属性。
        - setattr: 通过字符串,设置对象或类的属性。
        - delattr: 通过字符串,删除对象或类的属性。
    
  • 魔法方法(类的内置方法)

    魔法方法:
        凡是在类内部定义,以“__开头__结尾”的方法都称之为魔法方法,又称“类的内置方法”。
        魔法方法会在某些条件成立时触发。
    
        __init__: 在调用类时触发。
        __str__: 会在打印对象时触发。
        __del__: 对象被销毁前执行该方法,该方法会在最后执行。
        __getattr__: 会在对象.属性时,“属性没有”的情况下才会触发。
        __setattr__: 会在 “对象.属性 = 属性值” 时触发。
        __call__: 会在对象被调用时触发。
        __new__: 会在__init__执行前触发。
    

4.单例模式(面试30%会问)
单例模式指的是单个实例,实例指的时调用类产生的对象

实例化多个对象会产生不同的内存地址,单例可以让所有调用者,
在调用类产生对象的情况下都指向同一份内存地址。 例如: 打开文件。

单例的目的:
    为了减少内存的占用。

实现方式:

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):
        # cls.__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()
posted @ 2019-10-17 15:11  Yugaliii  阅读(102)  评论(0)    收藏  举报