Home

abawchen's graffiti

26 Dec 2017

Python Types and Objects Part 1

主要是翻譯 Python Types and Objects,一些名詞個人傾向保留原文。

這系列的文章會幫助你理解:

  • 什麼是 <type ‘type’> <type ‘object’>
  • 如何定義 classes instances 以及和 built-in types 之間的關係
  • 什麼是 metaclasses

一個 object 裡面有什麼:

  • Identity: 辨別不同的 object
  • A value: 一個 object 可以有很多屬性,像是 objectname.attributename
  • A type: 每個 object 只會有一個 type。舉例來說 object 2 的 type 是 intobject “joe” 的 type 是 string
  • 一個或多個 bases: 類似於 OO (物件導向)的 super-class 或是 base-class,而不是每個 object 都有 bases

下面用一個 int object 來做說明:

>>> two = 2        #1
>>> type(two)
<type 'int'>       #2
>>> type(type(two))
<type 'type'>      #3
>>> type(two).__bases__
(<type 'object'>,) #4
>>> dir(two)       #5
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__',
'__delattr__', '__div__', '__divmod__', '__doc__', '__float__',
'__floordiv__', '__format__', '__getattribute__', '__getnewargs__',
'__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__',
'__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__',
'__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__',
'__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__',
'__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__',
'__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__',
'__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__',
'__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__',
'conjugate', 'denominator', 'imag', 'numerator', 'real']
  1. #1: 宣告一個 object two
  2. #2: two 的 type 是 int
  3. #3: int 的 type 是 type (type of <type ‘int’> is an object call <’type type’>)
  4. #4: int type 的 super-class 是個 tuple(object,)
  5. #5: two 的所有 attributes

這個例子到底要先告訴你: Everything is object,有了這個概念之後,接著我們要來討論 object 之間的關係:

  • subclass-superclass relationship: 也就是 inheritance(繼承),像是 “人是一種動物”
  • type-instance relationship: 也就是 instantiation(實體化),像是 “阿寶是一個人”

Til next time,
abawchen at 22:27