[英]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__
作为加速部分代码的可选技术是您选择做出的权衡。 我无法回答这对你来说是否是一个值得的设计决定,因为它完全基于意见。
如果您希望提高安全性以防止出现您所描述的问题,可以使用诸如mypy
和pylint
类的工具来捕获此类错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.