如何区分python非类对象和类对象

如何区分python非类对象和类对象,python,class,attributes,types,descriptor,Python,Class,Attributes,Types,Descriptor,我是python新手。我认为非类对象没有基属性,而类对象有它。但我不确定。python\cpython如何检查对象是非类还是类,并在属性访问期间相应地将正确的参数传递给对象的描述符属性 ============================================ 更新: 我正在学习如何将\uuuu getattribute\uuuu和描述符协作来生成有界方法。我想知道类对象和非类对象如何以不同的方式调用描述符的\uuuu get\uuuu。我认为这两种类型的对象共享相同的\uuu g

我是python新手。我认为非类对象没有属性,而类对象有它。但我不确定。python\cpython如何检查对象是非类还是类,并在属性访问期间相应地将正确的参数传递给对象的描述符属性

============================================

更新:

我正在学习如何将
\uuuu getattribute\uuuu
和描述符协作来生成有界方法。我想知道类对象和非类对象如何以不同的方式调用描述符的
\uuuu get\uuuu
。我认为这两种类型的对象共享相同的
\uuu getattribute\uuu
CPython函数,并且该函数必须知道调用对象是类还是非类。但我错了。这篇文章很好地解释了这一点:

因此类对象使用
type.\uuuuu getattribute.\uuuuu
而非类对象使用
object.\uuuu getattribute.\uuuuu
。它们是不同的CPython函数。而且super还有第三个
\uu getattribute\uuu
CPython实现

然而,关于superone,上述文章指出: 引述


super()返回的对象还有一个用于调用描述符的自定义_getattribute_u2;()方法。调用super(B,obj).m()搜索obj.\u class.\u mro_u查找紧跟在B之后的基类A,然后返回A.\u dict.\uu['m'].\u get_j(obj,A)。如果不是描述符,则返回m时保持不变。如果不在字典中,m将还原为使用对象的搜索。_getattribute_uz()。


上面的陈述似乎与我的Python3.1实验不符。我看到的是,这对我来说是合理的:

super(B,obj).m--->A.uuu dict_uuu['m']。uuu get_uuu(obj,type(obj))

objclass=类型(obj)

super(B,对象类).m--->A.\uuu dict\uuuu['m'].\uu get\uuuu(无,对象类)

A从未传递给
\uuuu get\uuuu

这对我来说是合理的,因为我相信objclass(而不是A)的mro链是m中需要的,尤其是第二种情况

我做错什么了吗?或者我没有正确理解它?

inspect.isclass(objectname)怎么样


更多信息请点击此处:

正如评论者所问:你为什么在意?通常情况下,这是Python没有按预期的方式使用的标志


Python的一个非常强大的概念是。您不关心对象的类型或类,只要它公开您需要的属性

我不清楚你在问什么。也许可以举个例子?你为什么要关心这个?附议。关注这一点违背了Python开发的目的之一。