面向对象的slots

优点:

  1. __slots__ 能够减小内存的占用,限制对象只能有这几个属性,再加属性会报错 .

 副作用:

  1. 设置了__slots__之后,实例对象就没有__dict__了

  2. __slots__不能限制子类

详细代码解读:

  限制对象只能有这几个属性,再加属性会报错

  

  1. 设置了__slots__之后,实例对象就没有__dict__了

  2. __slots__不能限制子类

class BaseResponse(object):
    __slots__ = ('code', 'data', 'msg')

    def __init__(self):
        self.code = 0
        self.data = None
        self.msg = ''

    @property
    def dict(self):
        return {'code': self.code, 'data': self.data, 'msg': self.msg}


if __name__ == '__main__':

    res_obj = BaseResponse()
    res_obj.data = [11, 22, 33]
    res_obj.code = 10003
    res_obj.msg = '用户名或密码错误'

    print(res_obj.dict)
    # 设置了__slots__之后,实例对象就没有__dict__了
    # print(res_obj.__dict__)
    # res_obj.name = 'HX'

    # __slots__不能限制子类
    class Son(BaseResponse):
        pass

    s1 = Son()
    print(s1.__dict__)
    s1.name = 'HX'
    print(s1.name)
    print(s1.__dict__)

猜你喜欢

转载自www.cnblogs.com/yuanyongqiang/p/10312206.html
今日推荐