I come from a PHP background and would like to know if there\'s a way to do this in Python.
In PHP you can kill 2 birds with one stone like this:
Instead of
A variation on Alex's answer:
class DataHolder:
def __init__(self, value=None, attr_name='value'):
self._attr_name = attr_name
self.set(value)
def __call__(self, value):
return self.set(value)
def set(self, value):
setattr(self, self._attr_name, value)
return value
def get(self):
return getattr(self, self._attr_name)
save_data = DataHolder()
Usage:
if save_data(get_input()):
print save_data.value
or if you prefer an alternative interface:
if save_data.set(get_input()):
print save_data.get()
I would find this helpful to test a series of regular expressions in an if-elif-elif-elif etc construct, as in this SO question:
import re
input = u'test bar 123'
save_match = DataHolder(attr_name='match')
if save_match(re.search('foo (\d+)', input)):
print "Foo"
print save_match.match.group(1)
elif save_match(re.search('bar (\d+)', input)):
print "Bar"
print save_match.match.group(1)
elif save_match(re.search('baz (\d+)', input)):
print "Baz"
print save_match.match.group(1)