我已经用 Python 编程很长时间了,但我仍然不明白为什么类默认基于 __dict__
字典而不是更快的 __slots__
元组。
使用更高效且不太灵活的 __slots__
方法作为默认实现,而将更灵活但更慢的 __dict__
方法作为可选方法不是更有意义吗?
此外,如果一个类使用 __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 代码的解释方式,设计一个可以预见并提前准确确定特定类将使用哪些变量的系统非常困难,特别是考虑到setattr()
的存在”以及其他类似的函数,它们可以以不可预测的方式修改其他对象的状态。
总而言之,Python 的设计注重灵活性而非性能,因此,如果您希望编写自己的代码,那么将__slots__
作为加速部分代码的可选技术是您选择做出的权衡。 Python 代码。我无法回答这对您来说是否是一个值得的设计决定,因为它完全基于意见。
如果您希望更安全地防止出现您所描述的问题,可以使用mypy
和pylint
等工具来捕获此类错误。
关于python - 为什么 __slots__ 不是 Python 中的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73265618/