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 是 int, object “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: 宣告一個 object two
- #2: two 的 type 是 int
- #3: int 的 type 是 type (type of <type ‘int’> is an object call <’type type’>)
- #4: int type 的 super-class 是個 tuple(object,)
- #5: two 的所有 attributes
這個例子到底要先告訴你: Everything is object,有了這個概念之後,接著我們要來討論 object 之間的關係:
- subclass-superclass relationship: 也就是 inheritance(繼承),像是 “人是一種動物”
- type-instance relationship: 也就是 instantiation(實體化),像是 “阿寶是一個人”
Til next time,
abawchen
at 22:27