面向对象的 __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__)

 

转载于:https://www.cnblogs.com/yuanyongqiang/p/10312206.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值