samwyse wrote:
On Aug 3, 1:20 am, Steven D'Aprano <steve-REMOVE-
t...@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):
            pass
    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):
        pass

And in action:

c = NullWithMethods()
c.spam("hello", "world")
c.something_completely_unlikely.spam.ham("hello", "world", foo=42)
--
Steven

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.

JM
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to