By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
439,986 Members | 1,583 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,986 IT Pros & Developers. It's quick & easy.

__getattr__ equivalent for a module

P: n/a
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.
--
Maksim Kasimov
Jan 15 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Maksim Kasimov wrote:
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__])
Jan 15 '07 #2

P: n/a

Hi Leif, many thanks - it works

Leif K-Brooks wrote:
Maksim Kasimov wrote:
>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__])

--
Maksim Kasimov
Jan 15 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.