我正在试图找出我将使用object()
内置函数的内容。它不需要参数,并返回所有Python类通用的类型的“无特征对象”,并且具有所有Python类共有的所有方法。
引用Jack Skellington,WHAT. IS. THIS?
答案 0 :(得分:11)
即使您不需要使用它进行编程,object
也可以达到目的:它是从中派生所有其他对象的公共类。它是mro
(method 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()