類可以是另一個類的對象嗎?

對象是類的的實例,假設小明是「人」類的對象,是「男人」類的對象。那麼「男人」是「人」類的對象嗎?男人是「人」類的實例嗎?還是說男人是「人」類的子類並不是具體的對象?搞不明白啊?


object 類就是 type(元)類的實例。這是一個二層的結構(有類,有元類,但是沒有「元元類」;類似的例子有很多,比如FP中,有普通函數,有高階函數,但沒有「高高階函數」;類型理論中,有普通類型,有高階類型(HKT),但是也沒有更高的了;在認知中,有具體概念,有抽象概念,但是沒有「抽象的抽象概念」……)。這不是樹狀結構(比如序數)。

PS: 別把 OOP 的概念映射到現實生活中來理解(當然你可以把現實生活中的對象關係映射到 OOP 中來建模)。

PPS: 想要搞研究而不搞實踐,你可以去折騰類型理論、抽象代數、範疇論什麼的。

PPPS: 「男人」是「人」的子集。「小明」是這兩個集合中的元素。


不是,男人是人的子類,子類是繼承關係,不是對象 - 類型關係。class的class在Python當中是metaclass,比如type,幾乎所有類的class都是type類,搞不懂就不要瞎想了,好好擼代碼,OO是用來給你做工程的,不是給你用來研究哲學的。


答案是後者,男人不是一個對象,只是人類的子類。

「一個男人」才是一個對象。


In [1]: class Human(object):
...: pass
...:

In [2]: class Man(Human):
...: pass
...:

In [3]: ming = Man()

In [4]: ming.__class__
Out[4]: __main__.Man

In [5]: Man.__class__
Out[5]: type

In [6]: Human.__class__
Out[6]: type


少年,你能問出這樣的問題說明你骨骼精奇,來學 Ruby 吧!

1.class

=&> Fixnum

1.class.class

=&> Class

1.class.class.class

=&> Class

以下是正經答題

小明.class

=&> 男人

男人.class

=&> Class

男人.superclass

=&> 人

人.class

=&> Class

小明.instance_of? 人

=&> false

小明.is_a? 人

=&> true


這裡要引入 「實例」 的概念

以上……


在dart裡面,class是type類的實例。type類是他本身的實例(很詭異,也沒啥用的知識點)


兩碼事 圖紙和建築物解釋類繼承比較合適

攪屎棍們會不恰當比喻 同時把簡單事情搞複雜


在「一切皆對象」的 Smalltalk 中,class 就是 metaclass 的實例。


看了前面幾個回答,說一下……

oo一共有兩種形式,基於類和基於原型,你的問題在基於原型中可以說是一個不錯的思想。

在基於類中,如果你是以面相介面或者父子類來理解我覺得也不算過分,畢竟只是一種設計方式的差異。里式替換原則就是這樣說明的。。。

理解好oo的重要兩個特徵即可,不同理解不同方式。


在objective-c中,類是元類的一個實例化對象。


類是設計圖紙,一個模版,一個製作說明,對象是按圖紙造出來的實體,具有類所定義的屬性與介面。

結合題主的問題,男人可以作為是小明這個對象的屬性的賦值,在人類這個類裡面的性別屬性定義裡面的賦值=男人。

如果把男人定義為類的話,也可以用繼承類的概念來做,男人這個類繼承了人類這個類,有人類所有的除了性別以外的所有屬性和介面,小明可以作為男人這個類的實例對象。


可以,有一個類叫class,你可以把它寫在任何地方


推薦閱讀:

求問怎樣用python/python turtle畫「心」呢?
Python的return如何理解?
Python這麼熱,會不會很快出現市場飽和,比如五年內?
if __name__ == __main__ 如何正確理解?

TAG:Python | 編程 | 計算機 | 面向對象編程 | Python入門 |