[英]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 of和subtype 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.