アトミック型(int、string、...)は値によって渡され、他のすべて(オブジェクト、関数へのポインター、メソッドへのポインターなど)は参照によって渡されるようです。
変数が値または参照によって渡されるかどうかを確認するための最良の方法は何ですか?
isinstance(input_, float) or isinstance(input_, basestring) or <...>
とてもエレガントではないようです。
必要な理由は次のとおりです。wx.Buttonをラップするクラスがあります。args/kwargsが値によって渡される型である場合、他のオブジェクトでの値の更新は考慮されません。したがって、いくつかのチェックは有益です
class PalpyButton(wx.Button):
def __init__(self, parent, btnLabel, handler, successMsg = None, args = (), kwargs = {}):
super(PalpyButton, self).__init__(parent, -1, btnLabel)
self.handler = handler
self.successMsg = successMsg
parent.Bind(wx.EVT_BUTTON, lambda event: self.onClick(event, *args, **kwargs), self)
def onClick(self, event, *args, **kwargs):
try:
self.handler(*args, **kwargs)
if self.successMsg != None:
if hasattr(self.successMsg, '__call__'):
showInfoMessageBox(self.successMsg())
else:
showInfoMessageBox(self.successMsg)
except BaseException, detail:
showErrorMessageBox(detail)