Python中__slots__的使用 - vip共享吧
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们


导航菜单
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们
Python

Python中__slots__的使用

2024/9/6 韩俊  Python教程 466 0

如果我们想要限制类对象的属性,比如我们只允许让类的对象只能有某几个属性有效,可以定义一个特殊的变量 __slots__ 来限制,要注意 __slots__ 的值必须是可迭代的(str,list,tuple,set,dict 或者自定义可迭代对象),但是我们一般习惯于使用一个元组来表示。

使用 __slots__

我们定义一个 Human 类,让该类定义的对象只有一个 sex 属性,其它属性无效。

class Human(object):
    __slots__ = ("sex",)
    def __init__(self):
        self.sex = "女"
        self.age = 18  # 错误,不允许除 sex 以外的属性存在

ruhua = Human()        # 定义此语句,调用构造函数执行代码

当然,给对象动态添加属性也受 __slots__ 限制。下面我们不在举动态增加属性的例子,大家可以自行试验。

class Human(object):
    __slots__ = ("sex",)
    def __init__(self):
        self.sex = "女"

ruhua = Human()  # 定义此语句,调用构造函数执行代码
ruhua.age = 18   # 错误,不允许除 sex 以外的属性存在

要注意 __slots__ 无法限制类的属性。

class Human(object):
    __slots__ = ("sex",)
    age = 18           # 正确,age 是属于类的,__slots__ 无法限制类属性
    def __init__(self):
        self.sex = "女"

ruhua = Human()
print(ruhua.age)

在有继承关系的类中,如果只有基类中有 __slots__,子类中没有 __slots__,要注意基类中 __slots__ 定义的属性仅对当前类的对象起限制作用,对继承的子类的对象不起作用。

class Human(object):
    __slots__ = ("sex",)
    def __init__(self):
        self.sex = "女"
        self.name = "human"  # 错误,受 __slots__ 限制

class Woman(Human):
    def __init__(self):
        Human.__init__(self)
        self.age = 18        # 正确,不受基类的 __slots__ 限制

hm = Human()                 # hm 是基类对象
ruhua = Woman()              # ruhua 是子类对象

如果想让定义的 __slots__ 在子类中也起作用,需要在子类中也定义 __slots__, 这样以来子类的对象允许定义的属性就被限制于自身的 __slots__ 加上父类的 __slots__。

class Human(object):
    __slots__ = ("sex",)
    def __init__(self):
        self.sex = "女"     # 正确,只受 Human 类中的 __slots__ 限制
        self.name = "如花"  # 错误,只受 Human 类中的 __slots__ 限制

class Woman(Human):
    __slots__ = ("name",)
    def __init__(self):
        self.sex = "女"     # 正确,符合基类中的 __slots__ 限制
        self.name = "如花"  # 正确,符合子类中的 __slots__ 限制
        self.age = 18        # 错误,不符合基类和子类中的 __slots__ 限制

ruhua = Woman()

注意:如果只有子类中有 __slots__,而基类中没有定义 __slots__,则子类中的 __slots__对 子类的对象或基类中的对象都不起任何作用。

class Human(object):
    def __init__(self):
        self.sex = "女"     # 正确,子类中的 __slots__ 不起任何作用
        self.name = "如花"  # 正确,子类中的 __slots__ 不起任何作用

class Woman(Human):
    __slots__ = ("name",)
    def __init__(self):
        self.sex = "女"     # 正确,子类中的 __slots__ 不起任何作用
        self.name = "如花"  # 正确,子类中的 __slots__ 不起任何作用
        self.age = 18       # 正确,子类中的 __slots__ 不起任何作用

ruhua = Woman()

本节重要知识点

要知道 __slots__ 只能对对象进行属性限制,而无法对类本身进行属性限制。

要知道 __slots__ 在有继承关系的类中对子类对象属性的限制规则。

点赞:0 分享

上一篇
Python中@property的介绍与使用
下一篇
python动态绑定属性和方法
作者头像 作者名称 作者性别
韩俊

热门推荐

1 Python中type和元类的用法
2 Python3切片
3 Python文件处理和输入输出(IO)
4 python3类和对象的概念
5 Python3初级运算符
6 Python3的变量和常量

评论列表

取消回复

    •  
      Login

      韩俊

      趁你现在还有时间,尽你自己最大的努力,努力做成你最想做的那件事,成为你最想成为的那种人,过着你最想过的那种生活。这个世界永远比你想的要更精彩,不要败给生活。

      退出登陆
      • 10076文章
      • 455评论
      • 80微语
  • 广告赞助

  • 二零二五年07月
    一二三四五六日
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
  • 分类

    • 网站模板源码
    • IT技术笔记
    • 好资源分享
    • 共享网络资源
  • 最新文章

      • 分享各大最新影视资源采集站网址合集资源共享
        • 经典的黄句子
          • 迷雾通:免费使用的VPN软件
            • 宝塔如何配置SSH密钥,并使用WinSCP工具远程连接服务器
              • 女人高情商祝福语简短
                • 京东外卖商户入驻指南及详细入驻攻略
                  • git教程及git常用命令指南
                    • 七一活动经典句子
  • 热门文章

    • 酷狗音乐VIP账号 酷狗音乐会员账号共享2017.01.29更新
    • 芒果tv vip会员账号 芒果tv会员账号共享2017.01.29更新
    • 爱奇艺vip账号 爱奇艺/PPS会员账号共享2016.12.12更新
    • 优酷/土豆vip会员账号 优酷会员账号共享2017.01.29更新
    • 活动:免费获得爱奇艺VIP/PPS会员账号50天以上的使用权!
    • 酷我音乐VIP账号 酷我音乐会员账号共享2016.12.31更新
    • 暴风影音会员账号 暴风影音会员账号共享2016.12.31更新
    • m1905会员账号 m1905会员账号共享2016.10.21更新
  • 最新评论

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/10.jpg

      你丫的 文章写得太好了 支持下!![F3...

    • https://www.vipshare8.com/content/templates/meta/Static/images/avatar.jpg

      很棒!刚在某网站看到这个,很欣赏,可惜下...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3861064027

      呃呃呃 oooo

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了111:根据激活的时间有一年的有效期!

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=792480561

      到2025就到期了吗?

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      [blockquote]打卡时间:16:...

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/7.jpg

      俊哥,想借用迅雷一用!但需要手机验证!看...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3293901900

      感谢大大的分享

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了好奥v:如果没有解析成功,可以切换接口...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=131241242441

      现在视频解析网站怎么用不了啦?

  • 网站统计 I 当前在线:291人

    • 本站管理:1位
    • 用户总数:593位
    • 置顶文章:2篇
    • 日志总数:10076篇
    • 微语总数:80条
    • 评论总数:455条
    • 标签总数:83条
    • 页面总数:8页
    • 分类总数:14个
    • 链接总数:16条
    • 运行天数:3721天
    • 最后更新:7月1日
    • 登录
    • 注册
    • 找回
    Copyright © 2025vip共享吧网站地图 网站备案豫ICP备19004194号-1

    免责声明:本站资源仅供用于学习和交流,本站部分素材内容来源于网络,如有侵权/投稿等,请及时联系站长.

    • 首页
    • 秒懂百科 秒懂百科
    • 搜索
    • 史上今日

    大家都在搜

    • 土豆vip账号共享
    • seo优化
    • 经典句子
    • 掌阅会员账号
    • 微信小程序源码
    • redis
    • 网赚
    • 小程序
    • meilisearch
    • 优酷vip账号共享
    • seo
    • 腾讯VIP账号共享
    • 千图网会员账号共享
    • m1905会员账号共享
    • 全民娱乐
    • 威客平台
    • 
    • 