で、mayaのバージョンごとに処理を変える方法ないかなーと思っていたので↑を参考にデコレータで実装してみました。
最後の行でdoSomething関数を実行していますが、同じ関数名でもmayaのバージョンによって処理が変わります。
import maya.cmds as cmds
maya_version = cmds.about(version=1) # mayaのバージョン
## バージョンごとに関数(メソッド)の処理を変えるデコレータ
class DoOnVertion(object):
## 初期化
def __init__(self, func):
self.func = func
## 関数のように呼び出された時の処理
# self.funcを実行する
def __call__(self, *args, **kwargs):
return self.func(*args, **kwargs)
## 指定されたバージョンとmayaバージョンが合っていれば関数(メソッド)を置き換える
def version(self, version):
print 'Replace funcition if version is [{0}].'.format(version)
def new_func(func):
if maya_version == version:
rtn = func
else:
rtn = self.func
return type(self)(rtn)
return new_func
# 指定バージョン以外のときの処理
@DoOnVertion
def doSomething(name=None):
print 'do something with argument [{0}].'.format(name)
# バージョン2015で実行したときの処理
@doSomething.version('2015')
def doSomething(name='cube'):
cmds.polyCube(name=name)
# バージョン2016で実行したときの処理
@doSomething.version('2016')
def doSomething(name='joint'):
cmds.createNode('joint', name=name)
# バージョン2017で実行したときの処理
@doSomething.version('2017')
def doSomething(name='transform'):
cmds.createNode('transform', name=name)
# doSomething関数の実行
# 実行するmayaのバージョンによって処理が変わる
doSomething()