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

Reply via email to