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

Python 内置的object()什么时候有用?,python,python-3.x,built-in,Python,Python 3.x,Built In,我正在试图弄清楚如何使用object()内置函数。它不接受任何参数,并返回一个所有Python类通用的“无特征对象”,并且具有所有Python类通用的所有方法 引用Jack Skellington的话,即使您不需要使用它进行编程,object也有一个用途:它是派生所有其他对象的通用类。它是mro()方法列出的最后一个类。我们需要这个概念的名称和对象,object就是为了这个目的 对象的另一个用途是创建 这通常用于多线程编程(通过队列传递)中。我们可能不想发送None或任何其他值,因为队列处理程序

我正在试图弄清楚如何使用
object()
内置函数。它不接受任何参数,并返回一个所有Python类通用的“无特征对象”,并且具有所有Python类通用的所有方法


引用Jack Skellington的话,

即使您不需要使用它进行编程,
object
也有一个用途:它是派生所有其他对象的通用类。它是
mro
()方法列出的最后一个类。我们需要这个概念的名称和对象,
object
就是为了这个目的

对象的另一个用途是创建

这通常用于多线程编程(通过队列传递)中。我们可能不想发送
None
或任何其他值,因为队列处理程序可能需要将这些值解释为要处理的参数。我们需要一些独特的价值,程序的其他部分不可能产生


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

那么简洁。如果覆盖点(特别是
\uuu setattr\uuuu
),它最有用,它允许您中断递归。例如:

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()

它不打算用作函数;它打算用作基类。在Python3中?为什么?我能从中得到什么?类会自动继承这些方法,不是吗?我觉得很有趣,在您提供的文档链接中,它有一些递归指向自身的超链接文本。欢迎使用堆栈交换!以下是我通常避免直接调用
对象
上的方法,而是使用
super()
。一个原因是它允许合作多重继承。当然,
对象
类仍然会涉及,因为它是
super()
调用最终到达的基类,但是您不需要显式地命名它。@Blckknght我大体上同意您的看法,但是,在中断递归的情况下,我通常还试图打破由一个超类引起的递归(使用框架不是很有趣吗?)。这是我(通常)显式使用object的一个用例。@Tritium21:我不完全确定我是否理解。你的意思是说,当另一种情况(
Do\u something\u other
在你的例子中)已经是对
super()的调用时,你会使用
object.\uuuuuuuuu setattr\uuuuuuu
而不是
super()。\uuuuuuu setattr\uuuuuuuu
,而这正是你试图跳过的?如果是这样的话,这是有道理的,但我不会称之为递归(我认为这是指调用自身的函数,而不是调用同名的超类方法)。如果
super()。即使并没有,我也会去拜访那个对象,若并没有别的,只是出于习惯。
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()