自力で「Python2」のコードを「Python3」にも対応させようとすると、なかなかアレコードを書くことになりますよね、、、
そこで便利そうなのが「six」です!
sixのインストール
pipが使える状態であれば、簡単にインストールすることができます!インストールされるファイルは、単独のpythonファイルなのでMayaなどにコピーするだけで使えそうです!(`・ω・´)ゞ
pip install six
バージョン判定
バージョン判定して処理を分岐したい時、素直にやると「sys.version_info」から判定することになりますが、Sixには定義済みの変数があります(*´ω`*)b
以下のコードは、Python2.7で実行した場合の結果です。
import six print six.PY2 print six.PY3 # True # False
メタクラス
Python3でメタクラスの追加方法が変更されましたが、Sixのデコレータ「@add_metaclass」を使うと、両バージョン対応で記述することができます!
from abc import ABCMeta, abstractmethod import six @six.add_metaclass(ABCMeta) class AbstractItem(object): __metaclass__ = ABCMeta @abstractmethod def create(self): pass @abstractmethod def delete(self): pass
Python のバージョン間で異なりうる定数
isinstance、issubclassで、色々判定をしたい時も、Python2とPython3ではベースになるものが変わっていますが、定義済みの変数が用意されています。
以下のコードは、Python2.7で実行した場合の結果です。
import six print six.class_types # (<type 'type'>, <type 'classobj'>) print six.integer_types # (<type 'int'>, <type 'long'>) print six.string_types # (<type 'basestring'>,) print six.text_type # <type 'unicode'> print six.binary_type # <type 'str'> print six.MAXSIZE # 9223372036854775807
その他にも
その他にも、「exec_」「print」などもたっくさん機能が用意されているので、是非ドキュメントに目を通して見てください!(*´ω`*)b
アベンジャーズ/インフィニティ・ウォー早く観たい!!(*´д`*)