Set run vars with each call
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Tue Jul 12 20:44:54 EDT 2011
Gnarlodious wrote:
> Question. Is there a special method or easy way to set default values
> with each call to an instance? Any ideas to make it easier? What I
> want to do is have a constantly updating set of values which can be
> overridden. Just thought there was an easy way to set that up.
All the words are in English, but the sentences make no sense :)
Seriously, I don't understand what you mean. "Call to an instance"? Do mean
treating instances as a callable (like a function), or do you mean calling
an arbitrary method?
To make an instance itself callable, define a __call__ method.
What do you mean, "constantly updating set of values that can be
overridden"? Perhaps a simple example might help.
The closest thing I can think of, might be: you want to store a data
attribute in an instance, and use that if the caller doesn't specify
differently. Something like:
class Parrot:
name = "Polly"
def speak(self, name=None):
if name is None:
name = self.name
print("%s wants a cracker!" % name)
And in use:
>>> p = Parrot()
>>> p.speak()
Polly wants a cracker!
>>> p.speak("Peter")
Peter wants a cracker!
>>> p.name = "Penelope"
>>> p.speak()
Penelope wants a cracker!
If None is a legitimate value, then you can define your own sentinel to use
instead:
MISSING = object() # Unique object guaranteed not to be used by the caller.
# (Guarantee void on planet Earth.)
then replace None by MISSING in the code above.
Is this the sort of scenario you are talking about? If not, I'm completely
lost.
--
Steven
More information about the Python-list
mailing list