为什么子类是对象的实例?

2024-04-19 12:57:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道,subclass应该是object的子类,但为什么它也是object的实例呢?你知道吗

hmank ~ » python
Python 3.7.3 (default, Mar 26 2019, 21:43:19) 
[GCC 8.2.1 20181127] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
...   pass
... 
>>> isinstance(A, object)
True
>>> issubclass(A, object)
True
>>> 

更重要的是,我引用@prosti answer的话isinstance

Returns a Boolean stating whether the object is an instance or subclass of another object.

但同一链接上的示例显示

>>> class Foo: pass
...
>>> class Bar(Foo): pass
...
>>> isinstance(Bar, Foo)
False
>

似乎意味着class1class2的一个实例,当且仅当class2object,对吧?你知道吗


Tags: or实例truedefaultobjectfoobarpass
3条回答

在python3中,所有类都派生自object

class A(object):
    pass

以及

class A:
    pass

完全相同。
关于isinstance(A, object)返回True
请参见以下代码

class A: 
    @classmethod 
    def do(cls): 
        print(f"hello from {cls.__name__}") 

A.do()                                                                  

# hello from A

这个问题不错。你知道吗

class A:
  pass

a = A()

print(isinstance(a, A)) #True
print(isinstance(object, A)) #False
print(isinstance(A, object)) #True
print(issubclass(A, A)) #True
print(issubclass(A, object)) #True

根据定义,^{}

Returns a Boolean stating whether the object is an instance or subclass of another object.

另一方面^{}

Returns a Bool type indicating whether an object is a subclass of a class.

它本身就是一个类的附加注释。你知道吗


更新:

Seems it means a class1 is an instance of class2, if and only if class2 is object, right?

你通过测试得到答案,逻辑非常简单。类是类,对象是类的实例。你知道吗

如果您真的需要理解implementation,您可以检查代码。你知道吗

如果你是个极客,你也可以找到test cases。你知道吗

在以下示例中,必须实例化对象才能对True进行分类:

class Foo: pass
class Bar(Foo): pass
print(isinstance(Bar(), Foo)) #True
print(isinstance(Bar(), Bar)) #True

print(Bar) #<class '__main__.Bar'>
print(Bar()) #<__main__.Bar object at 0x7f9fc8f32828>

另外,这里的一些例子是Python3特有的,如果你是Python2的家伙,你必须知道你应该更明确地写:

class Bar(object): pass

如果编写Python不可知代码,(object)部分是必须的。 最后,检查Standard on Overloading isinstance() and issubclass(),但要记住标准是“活的”,将来可能会更新。你知道吗

最后,您可以检查类对象关系上的this。你知道吗

因为python中的所有东西都被视为一个对象,这是一种更好的说法,即每个对象都是python中对象的一个实例!你知道吗

仔细想想,这是非常有意义的,因为python是一种面向对象的语言,正因为如此,每个值都是一个对象是很正常的


In [9]: class A: 
   ...:     pass 
   ...:                                                                                                                                               

In [10]: isinstance(A, object)                                                                                                                        
Out[10]: True

In [11]: isinstance(A(), object)                                                                                                                      
Out[11]: True

In [12]: isinstance(1, object)                                                                                                                        
Out[12]: True

In [13]: isinstance([2,3], object)                                                                                                                    
Out[13]: True

In [14]: isinstance('hello', object)                                                                                                                  
Out[14]: True

相关问题 更多 >