Raymond Hettinger wrote:
On Mar 31, 3:14 pm, Ben Finney <ben+pyt...@benfinney.id.au> wrote:
Howdy all,
I want to inherit from a class, and define aliases for many of its
attributes. How can I refer to “the attribute that will be available by
name ‘spam’ once this class is defined”?
class Foo(object):
def spam(self):
pass
def eggs(self):
pass
class Bar(Foo):
beans = Foo.spam
mash = Foo.eggs
Is that the right way to do it?
For methods, that will work just fine. For attributes, you will need
to make @property accessors that get and set the underlying attribute.
Raymond
For attributes you could also override __getattribute__ & __setattr__ to
wrap Bar's names into Foo's names.
Could work also for methods, but for methods your current idea is much
more simple.
class Foo(object):
def __init__(self):
self.spam = 'someSpam'
self.eggs = 'fewEggs'
def vanilla(self):
return self.spam
class Bar(Foo):
_map = {
'beans': 'spam',
'mash': 'eggs',
'chocolate': 'vanilla',
}
def __getattribute__(self, attribute):
getSafely = object.__getattribute__
_map = getSafely(self, '_map')
if attribute in _map:
return getSafely(self, _map[attribute])
else:
return getSafely(self, attribute)
Bar().chocolate()
'someSpam'
Bar().mash
'fewEggs'
JM
--
http://mail.python.org/mailman/listinfo/python-list