object()内置的什么时候有用?

时间:2013-09-22 01:08:15

标签: python python-3.x built-in

我正在试图找出我将使用object()内置函数的内容。它不需要参数,并返回所有Python类通用的类型的“无特征对象”,并且具有所有Python类共有的所有方法。

引用Jack Skellington,WHAT. IS. THIS?

2 个答案:

答案 0 :(得分:11)

即使您不需要使用它进行编程,object也可以达到目的:它是从中派生所有其他对象的公共类。它是mromethod resolution order)方法列出的最后一个类。我们需要这个概念的名称和对象,而object就是为了这个目的。

object的另一个用途是创建sentinels

sentinel = object()

这通常用于多线程编程 - 通过队列传递 - 到signal a termination event。我们可能不希望发送None或任何其他值,因为队列处理程序可能需要将这些值解释为要处理的参数。我们需要一些与程序的其他部分无关的独特价值。

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

答案 1 :(得分: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()