On Thu, Jul 29, 2010 at 6:34 PM, Anand Balachandran Pillai < abpil...@gmail.com> wrote:
> On Thu, Jul 29, 2010 at 5:33 PM, Mahadevan R <mdevan.foo...@gmail.com > >wrote: > > > On Thu, Jul 29, 2010 at 4:24 PM, Nitin Kumar <nitin.n...@gmail.com> > wrote: > > > fine, but isn't there any way to hide few function of base class into > > > derived one??? > > > > You can try obscuring it: > > > > class y(x): > > def __init__(self): > > x.__init__(self) > > self.A = None > > > > Trying to do something like this in Python shows a mistake > in the design of your classes. There are different ways to > do this in Python. Here are a few. > > 1. Prefix the function with double underscore ('__') > as steve said in his email. > I echo the same sentiments as Anand and Steve. If your class inherits from something, its assumed the child class is of the same `kind` as the parent. What you're asking sounds like this, I have a `Vehicle` class which can `drive()`, now I wanna subclass `Car`, but my `Car` doesnt implement `drive()` method. Having said that, I'll add another method to restrict access to this odd-function using __getattribute__. What is __getattribute__ ? Whenever you do access an attribute, be it for a function or an attribute (like obj.foo() or obj.value), obj.__getattribute__ is called. Things are really a little more involved than the simple explanation I wrote, but for this case you just need to know that much. class Parent(object): def childShouldntCallMe(self): doParentStuff() class Child(Parent): def __getattribute__(self, name): if name == "childShouldntCallMe": raise RestrictedAccessError # This could be a more polite NotImplementedError else: return super(Child, self).__getattribute__(name) /jeff _______________________________________________ BangPypers mailing list BangPypers@python.org http://mail.python.org/mailman/listinfo/bangpypers