我试图弄清楚我将使用object()
内置函数做什么。它不接受任何参数,并返回所有 Python 类共有的类型的“无特征对象”,并具有所有 Python 类共有的所有方法。
引用杰克·斯凯灵顿的话,什么。是。这个?
我试图弄清楚我将使用object()
内置函数做什么。它不接受任何参数,并返回所有 Python 类共有的类型的“无特征对象”,并具有所有 Python 类共有的所有方法。
引用杰克·斯凯灵顿的话,什么。是。这个?
即使您不需要使用它进行编程,它也object
有一个目的:它是派生所有其他对象的公共类。它是mro
(方法解析顺序)方法列出的最后一个类。我们需要这个概念的名称和对象,并object
服务于这个目的。
的另一个用途object
是创建哨兵。
sentinel = object()
这通常在多线程编程中使用——通过队列传递——以发出终止事件的信号。我们可能不想发送None
或任何其他值,因为队列处理程序可能需要将这些值解释为要处理的参数。我们需要一些程序的其他部分无法产生的独特价值。
以这种方式创建哨兵提供了这样一个独特的对象,它肯定不是一个正常的队列值,因此可以被测试并用作某些特殊事件的信号。还有其他可能性,例如创建一个类、类实例或函数,但所有这些替代方案都更大、资源更多,而且不像object()
.
如果您要覆盖点(尤其是 ),它最有用__setattr__
,它可以让您中断递归。例如:
class SomeClass(object):
def __setattr__(self, name, value):
if name not in ('attr1', 'attr2', 'attr3', 'attr4'):
object.__setattr__(self, name, value)
else:
do_something_else()