python - How to "hide" superclass methods in a subclass -
i want create subclass "hides" methods on superclass don't show in dir()
or hasattr()
call , users can't call them (at least not through of normal channels). least amount of "magic" possible. thanks.
overriding __dir__
, __getattribute__
method respectively should trick. pretty canonical way kind of stuff in python. although whether should doing entirely different matter.
see python docs on customizing attribute access
use __dir__
list available attributes (this won't affect actual attribute access)
class a(object): def __dir__(self): return [] >>> print dir(a()) []
use __getattribute__
control actual attribute access
class a(object): def __getattribute__(self, attr): """prevent 'private' attribute access""" if attr.startswith('_'): raise attributeerror return object.__getattribute__(self, attr) >>> = a() >>> a.x = 5 >>> a.x 5 >>> a._x = 3 >>> a._x attributeerror
this trying do.
class nosuper(object): def __getattribute__(self, attr): """prevent accessing inherited attributes""" base in self.__bases__: if hasattr(base, attr): raise attributeerror return object.__getattribute__(self, attr)
Comments
Post a Comment