Why doesn't this work? :)

Chris Lambacher chris at kateandchris.net
Fri Oct 28 14:50:10 EDT 2005


I think what you really want is:

try:
	# this will fail and be caught
	# below, weeee
	import foobar

except ImportError, error:
	class foobarclass:
		def __getattr__(*args, **kargs):
			return None
    foobar = foobarclass()

print foobar.bg


foobar in your version is a class.  By making it an instance, the __getattr__ method is properly called.


-Chris


On Fri, Oct 28, 2005 at 02:02:29PM -0400, Jeremy Moles wrote:
> Jumping right into the code (which should speak for itself):
> 
> # -----------------------------------
> 
> try:
> 	# this will fail and be caught
> 	# below, weeee
> 	import foobar
> 
> except ImportError, error:
> 	class foobar:
> 		@staticmethod
> 		def __getattr__(*args, **kargs):
> 			return None
> 
> print foobar.bg
> 
> # -----------------------------------
> 
> This doesn't work and I'm just curious as to why? I can, of course, make
> __getattr__ non-static, instantiate a foolbar object, and everything
> works; but, the "idea" above seems cleaner and whatnot. :)
> 
> Am I misunderstanding something fundamental about the builtin __*
> functions? Can they not be "static?"
> 
> No rush on this, just curious. I'm using the following in a more general
> way, and it works fine for now... :)
> 
> # -----------------------------------
> 
> try:
> 	import foobar
> 
> except ImportError, error:
> 	class Foobar:
> 		def __getattr__(*args, **kargs):
> 			return None
> 
> 	foobar = Foobar()
> 
> print foobar.bg
> 
> # -----------------------------------
> 
> 
> -- 
> http://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list