繁体   English   中英

为什么 __slots__ 不是 Python 中的默认值?

[英]Why __slots__ isn't the default in Python?

我已经在 Python 中编程了很长时间,但我仍然不明白为什么类默认将其属性查找基于__dict__字典而不是更快的__slots__元组。

使用更高效、更不灵活的__slots__方法作为默认实现而不是更灵活但更慢的__dict__方法不是更有意义吗?

此外,如果 class 使用__slots__来存储其属性,则不会像这样错误地创建新属性:

class Object:
    __slots__ = ("name",)
    def __init__(self, name):
        self.name = name

obj = Object()
# Note the typo here
obj.namr = "Karen"

所以,我想知道 Python 默认通过__dict__而不是通过__slots__访问实例属性是否有正当理由。

Python 被设计成一种极其灵活的语言,并允许对象在运行时以许多有趣的方式修改自己。 进行更改以防止这种灵活性会破坏大量其他人的代码,因此为了向后兼容,我认为它不会很快发生(如果有的话)。

除此之外,由于 Python 代码的解释方式,很难设计一个可以预见并准确确定特定 class 将提前使用哪些变量的系统,特别是考虑到setattr()和其他类似的功能,可以以不可预知的方式修改其他对象的state。

总之,Python 旨在重视灵活性而不是性能,因此,如果您希望在 Python 中编写代码,则将__slots__作为加速部分代码的可选技术是您选择做出的权衡。 我无法回答这对你来说是否是一个值得的设计决定,因为它完全基于意见。

如果您希望提高安全性以防止出现您所描述的问题,可以使用诸如mypypylint类的工具来捕获此类错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM