Serhii Asked:2020-09-16 14:12:44 +0000 UTC2020-09-16 14:12:44 +0000 UTC 2020-09-16 14:12:44 +0000 UTC Python __slots__ - 为什么不能总是使用它? 772 阅读后问了这个问题 -插槽的使用? class WithSlots(object): __slots__ = 'static_attr' 在阅读了 Python 中的插槽后,它们可以节省内存,我只了解一件事,即当创建一个类的许多实例时,它是有益的(使用插槽)。 而对此,我有这样一个疑问,既然slots在节省内存方面有优势,为什么不能一直使用呢? 作为回报,插槽通过节省内存会产生什么问题? python 1 个回答 Voted Best Answer Eugene Dennis 2020-09-16T16:40:33Z2020-09-16T16:40:33Z 它们限制了类属性的集合——这就是为什么你不能像许多人喜欢的那样自由地添加任何属性并执行各种疯狂的继承。会弹出来AttributeError。当您重写代码或如前所述创建大量代码时,您可以添加插槽并加快脚本速度,但大多数情况下,程序员会走“无人涉足”的道路 - 没有时间用于插槽。 import time class Timer: def __enter__(self): self.start = time.clock() return self def __exit__(self, *args): self.end = time.clock() self.interval = self.end - self.start class A: pass class B(object): __slots__ = ('a', 'b',) def my(class_): my_obj = class_ my_obj.a = 10 my_obj.b = "qwerty" print my_obj.a, my_obj.b with Timer() as t1: for _ in range(1000): my(A()) with Timer() as t2: for _ in range(1000): my(B()) print('Time1: {} sec.'.format(t1.interval)) print('Time2: {} sec.'.format(t2.interval)) # Time1: 0.0264316595496 sec. # Time2: 0.0241797159653 sec.
它们限制了类属性的集合——这就是为什么你不能像许多人喜欢的那样自由地添加任何属性并执行各种疯狂的继承。会弹出来
AttributeError。当您重写代码或如前所述创建大量代码时,您可以添加插槽并加快脚本速度,但大多数情况下,程序员会走“无人涉足”的道路 - 没有时间用于插槽。