Кажется, что атомарные типы (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)