8

我试图弄清楚我将使用object()内置函数做什么。它不接受任何参数,并返回所有 Python 类共有的类型的“无特征对象”,并具有所有 Python 类共有的所有方法。

引用杰克·斯凯灵顿的话,什么。是。这个?

4

2 回答 2

12

即使您不需要使用它进行编程,它也object有一个目的:它是派生所有其他对象的公共类。它是mro方法解析顺序)方法列出的最后一个类。我们需要这个概念的名称和对象,并object服务于这个目的。

的另一个用途object是创建哨兵

sentinel = object()

这通常在多线程编程中使用——通过队列传递——以发出终止事件的信号。我们可能不想发送None或任何其他值,因为队列处理程序可能需要将这些值解释为要处理的参数。我们需要一些程序的其他部分无法产生的独特价值。

以这种方式创建哨兵提供了这样一个独特的对象,它肯定不是一个正常的队列值,因此可以被测试并用作某些特殊事件的信号。还有其他可能性,例如创建一个类、类实例或函数,但所有这些替代方案都更大、资源更多,而且不像object().

于 2013-09-22T01:31:20.080 回答
4

如果您要覆盖点(尤其是 ),它最有用__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()
于 2013-09-22T01:43:08.763 回答