似乎原子类型(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)