Python class A(object): 的 object 是?

```python
class A:
pass // 我是舊風格的 class,新功能都不支援,哭哭。

class B(object):
pass // 我是新世代的 class,走路都有風。
```

在 python 2.2 時候,對 class 有重大更新,許多新特色、新 built-in function 加入其中,想讓 class 的 meta-info 可以更全面。 新的特色就像是 object 開始支援下列的東西

  • super()
  • property()
  • type(A) will eq A.__class__ , not the string 'instance'.

但是一些相容性的問題,在預設上必須要明確讓最上層的 class 去繼承 object, 如同例子的 class B ,才會使得一整個族的 class 都有 new-style class 的 features。沒有寫明繼承 object 像是例子中的 class A ,在 Python 2 裡,會依然是 old-style class,但在 Python 3 不管有沒有寫,都會視作 new-style class 。依照 Python 3 預設就會讓你使用 new-style 的 class ,我猜想官方的立場是,除了相容性的問題之外,所有新建立的 class 都應該去繼承 object

comments powered by Disqus