新旧クラススタイル | Python-izm

新旧クラススタイル

Python 2系では新クラススタイル旧クラススタイルあります。その定義方法と違いを見ていきましょう。

クラススタイルの選択

Python 2系では

Python 2系(2.2以降)では新クラススタイルと旧クラススタイルの両者から選ぶことができます。その定義方法はobjectを継承するかしないかです。

Python 2系

# -*- coding: utf-8 -*-


# 旧スタイルクラス
class OldStyleClass:
    pass


# 新スタイルクラス
class NewStyleClass(object):
    pass


print type(OldStyleClass)
print type(NewStyleClass)
<type 'classobj'>
<type 'type'>

実行結果の通りtype関数で得られる結果が異なります。

Python 3系では

Python 3系では2系でいうところの新クラススタイルのみ存在し、旧クラススタイルはありません。以下のような記述でも新スタイルクラスです。

Python 3系

# 新スタイルクラス
class NewStyleClass:
    pass


print(type(NewStyleClass))
<type 'type'>

新旧クラススタイルの相違点

クラススタイルによって出来ること、出来ないことに差があります。本項では触れませんので各ページを参照してください。