類可以是另一個類的對象嗎?
對象是類的的實例,假設小明是「人」類的對象,是「男人」類的對象。那麼「男人」是「人」類的對象嗎?男人是「人」類的實例嗎?還是說男人是「人」類的子類並不是具體的對象?搞不明白啊?
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
=&> Fixnum1.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__ 如何正確理解?