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