__getattr__ equivalent for a module

M

Maksim Kasimov

Hi,

in any python class it is possible to define __getattr__ method so that if we try to get some value of not actually exists instance attribute, we can get some default value.

For example:

class MyClass:

def __getattr__(self, attname):

if attname.startswith('a'):
return "*"


i = MyClass()
....
i.aValue # it gives "*" if "i.aValue" will not be set before this call


i need to define the same behavior for a module:

import mymodule
mymodule.anyattribute
or
from mymodule import anyattribute

"anyattribute" is not actually defined in the module, but gives some attribute of the module

so my question is: how to tune up a module get default attribute if we try to get access to not actually exists attribute of a module?

(python 2.4 or 2.2)

many thanks for help.
 
L

Leif K-Brooks

Maksim said:
so my question is: how to tune up a module get default attribute if we
try to get access to not actually exists attribute of a module?

You could wrap it in an object, but that's a bit of a hack.

import sys

class Foo(object):
def __init__(self, wrapped):
self.wrapped = wrapped

def __getattr__(self, name):
try:
return getattr(self.wrapped, name)
except AttributeError:
return 'default'

sys.modules[__name__] = Foo(sys.modules[__name__])
 
M

Maksim Kasimov

Hi Leif, many thanks - it works
Maksim said:
so my question is: how to tune up a module get default attribute if we
try to get access to not actually exists attribute of a module?

You could wrap it in an object, but that's a bit of a hack.

import sys

class Foo(object):
def __init__(self, wrapped):
self.wrapped = wrapped

def __getattr__(self, name):
try:
return getattr(self.wrapped, name)
except AttributeError:
return 'default'

sys.modules[__name__] = Foo(sys.modules[__name__])
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,056
Latest member
GlycogenSupporthealth

Latest Threads

Top