簡體   English   中英

Python中的類對象和類類型

[英]Class object and class type in Python

我是 Python 新手,我有一個關於 OOP 的問題。 因此,當我們創建一個類時,我們在括號中寫上“對象”。 例如,

class My(object):

我在某處讀到這意味着該類繼承自 Python 中的object類。 但我也讀過我們創建的每個類都是type類的實例。 所以我的問題是object類與type類相同,如果是,為什么當要求 Python 打印類的類型時,它返回<class 'type'>而不是<class 'object'> 還有,為什么不能寫

class My(type):

如果object類和type類相同?

這里有兩種關系: instance ofsubtype of 對於非編程類比,您可以像這樣考慮差異。 坐在桌子上的特定蘋果是“apple”的一個實例 這是一個蘋果的例子,那個特別的。 另一方面,“蘋果”作為一個概念是“水果”的一個子類型 每個蘋果都是水果。 說坐在你桌上的特定蘋果是任何事物的子類型是不准確的,因為它是特定的。 說“蘋果”的概念是“水果”的一個實例是沒有意義的,因為它不是。

你在 Python 中定義的每個類都是object子類型,它是所有類型的類型。 本身也是 Python 中的一個對象,它的類型是type 后者可用於進行一些巧妙的元編程,但這是您現階段可能不需要搞亂的高級 Python。

class Foo(object):
  pass

assert isinstance(Foo, type) # Foo is a type
assert issubclass(Foo, object) # Foo is a subclass of object
assert isinstance(Foo, object) # Every type (and everything in Python) is an object
assert isinstance(Foo(), Foo) # A specific foo is a Foo
assert isinstance(Foo(), object) # A specific foo is an object

現在,當你正在學習 Python 時,忘記type的存在是很安全的。 它花哨而復雜,用於一些非常復雜的元編程技巧。 現在,只需使用object並假設類是一些神奇的東西,然后學習如何使用它們。 一旦你有了堅實的基礎,你就可以了解它們如何工作的細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM