日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中object是什么类型_Python 的 type 和 object 之间是怎么一种关系?

發布時間:2025/3/11 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中object是什么类型_Python 的 type 和 object 之间是怎么一种关系? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

class,metaclass,instance,subclass,base

以下成立:

對任意的A,A是instance(推論:任意class也是instance)

對任意A,存在B,使得B是A的class

A是class 定義為 從A可以創建B(直接或間接),使得B是A的instance

A是B的metaclass 等價于 B是class,且A是B的class(也就是class的class)

A是metaclass等價于A是class,且從A創建的instance B是class

推論:對任意A是class,存在B使得B是A的metaclass

type的metaclass是type自己

對A和B是class,A是B的base等價于B是A的subclass(這里為了防歧義規定A不是A的subclass,可能與iasubclass不同)

A是B的base,則B不是A的base

A是B的instance當且僅當:B是A的class,或B是A的class的base

object是所有其他class的base(推論:任意A是object的instance,包括object)

推論:沒有類是object的base

type是所有其他metaclass的base

推論:object是type的base

type是object的metclass

type是type的class/metaclass

type是type的instance

object是object的instance

type是object的instance

object是type的instance

注意:metaclass的base不一定是metaclass

class與instance,base與subclass只是兩種正交的關系,它們通過isinstance相互聯系,在Python中并不要求它們有先后順序

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

我補充一下什么叫做“不要求有先后順序”,實際上在Python當中自定義類的__bases__,自定義實例的__class__是可以修改的……

>>> class A(object): pass

...

>>> class B(object): pass

...

>>> class C(A): pass

...

>>> c = C()

>>> c.__class__

>>> C.__bases__

(,)

>>> isinstance(c, C)

True

>>> isinstance(c, A)

True

>>> isinstance(c, B)

False

>>> issubclass(C, A)

True

>>> issubclass(C, B)

False

>>> C.__bases__ = (B,)

>>> issubclass(C, A)

False

>>> issubclass(C, B)

True

>>> isinstance(c, A)

False

>>> isinstance(c, B)

True

>>> c.__class__ = A

>>> isinstance(c, C)

False

>>> isinstance(c, B)

False

>>> isinstance(c, A)

True

本質上來說就是一個指向的關系,想怎么改就可以怎么改,只要不違背我上面所說的法則就行。Python里的class和instance就是這樣沒有節操的東西……

我們下面來造一個A是B的metaclass,B是A的base的例子:

>>> class A(type): pass

...

>>> class B(metaclass=A): pass

...

>>> A.__bases__ = (type, B)

>>> isinstance(B, A)

True

>>> issubclass(A, B)

True

>>> isinstance(B, B)

True

由于Python實現的問題,不是所有的__bases__和__class__都可以隨意指定(有一些限制),但大體上可以理解為就是個可以改的指針

總結

以上是生活随笔為你收集整理的python中object是什么类型_Python 的 type 和 object 之间是怎么一种关系?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。