simple (I hope!) problem
jeanmichel at sequans.com
Thu Aug 5 11:32:06 CEST 2010
> On Aug 3, 1:20 am, Steven D'Aprano <steve-REMOVE-
> T... at cybersource.com.au> wrote:
>> On Mon, 02 Aug 2010 17:19:46 -0700, samwyse wrote:
>>> Fortunately, I don't need the functionality of the object, I just want
>>> something that won't generate an error when I use it. So, what is the
>>> quickest way to to create such an object (replacing the 'pass' in my
>>> first snippet). My solution is this:
>>> class C:
>>> def filter(self, *args, **kwds):
>>> register = C()
>>> but it seems like I should be able to do something "better", as measured
>>> by lines of code, faking more than just a 'filter' method, or both. Any
>>> ideas? Thanks!
>> You want a variation on the Null Object design pattern.
>> class NullWithMethods(object):
>> def __getattr__(self, name):
>> return self
>> def __call__(self, *args, **kwargs):
>> And in action:
>>>>> c = NullWithMethods()
>>>>> c.spam("hello", "world")
>>>>> c.something_completely_unlikely.spam.ham("hello", "world", foo=42)
> JM emailed me a good solution, but yours is great! Thanks!
The version I gave you overrides __getattribute__. To be honest,
overriding __getattr__ is a better solution.Just in case you don't know
the difference, __getattr__ is called only if the attribute is not found
while __getattribute__ is actually called to find the attribute.
More information about the Python-list