优点:

  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__)

面向对象的 __slots__的更多相关文章

  1. Python个人笔记

    目录 前言 查看Python以及第三方包安装位置 Python打包成exe 安装pyinstaller打包工具 打包 Python操作json 储存json 读取json 中文问题 倒计时关闭程序 P ...

  2. 【Python】[面向对象高级编程] 使用__slots__,使用@property

    1.使用 __slots__    给实例绑定方法, >>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age .. ...

  3. Python面向对象高级编程-__slots__、定制类,枚举

    当在类体内定义好各种属性后,外部是可以随便添加属性的,Python中类如何限制实例的属性? Python自带了很多定制类,诸如__slots__,__str__ __slots__ __slots__ ...

  4. python面向对象高级:__slots__

    __slots__ 一个在有着数以千计的对象的类的时候节省内存的方法. 在Python中,每个类都有实例属性.默认情况下Python用一个字典来保存一个对象的实例属性.这非常有用,因为它允许我们在运行 ...

  5. 面向对象高级编程(1)-使用__slots__

    使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> ...

  6. Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__

    参考:slots NOTE 1.动态语言灵活绑定属性及方法. #!/usr/bin/env python3 class MyClass(object): def __init__(self): pas ...

  7. __slots__(面向对象进阶)

    1.__slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 2.引子:使用点来访问属性本质就是在访问类或者对象的__dic ...

  8. 面向对象中的__slots__

    类中的__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性. 而要限制class的属性就需要用到__sl ...

  9. 面向对象高级编程——使用__slots__

    正常情况下,我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Student ...

随机推荐

  1. Odoo二次开发

    Odoo 点击进入

  2. Python 爬虫之下载图片

    from urllib import request import json #---------获取网页源代码-------------- def getHtml(url): response=re ...

  3. ServerSocket详解及线程阻塞_03

    ServerSocket详解构造方法ServerSocket()ServerSocket(int port)ServerSocket(int port ,int backlog)serverSocke ...

  4. node环境

    下载教程:http://www.runoob.com/nodejs/nodejs-install-setup.html 选择版本下载:https://nodejs.org/en/download/ 输 ...

  5. 'Settings' object has no attribute 'FYFQ_URL_test'

    读取django settings内容时报错: 'Settings' object has no attribute 'FYFQ_URL_test' 原因:settings中的变量,必须都是大写

  6. Springboot项目读取resource下的静态资源方法

    如果按相对路径直接读会定位到target下,因为springboot打包后读到这里 如果做单元测试的话是找不到文件的 File jsonFile = ResourceUtils.getFile(&qu ...

  7. hbase的常用的shell命令&hbase的DDL操作&hbase的DML操作

    前言 笔者在分类中的hbase栏目之前已经分享了hbase的安装以及一些常用的shell命令的使用,这里不仅仅重新复习一下shell命令,还会介绍hbase的DDL以及DML的相关操作. hbase的 ...

  8. Json.Net(Newtonsoft)系列教程 4.Linq To JSON

    转自:https://www.cnblogs.com/sczmzx/p/7813834.html   一.Linq to JSON是用来干什么的? Linq to JSON是用来操作JSON对象的.可 ...

  9. Unity 自定义导入时切割Sprite

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; us ...

  10. 我的vimrc设置

    vim一个文件 :e version :editor version 查看.vimrc所在的系统和用户文件 vim ~/.vimrc " 行号 set number " 语法高亮( ...