可以在内部类上定义私有方法,然后使用self._private.method在内部访问它:class PublicObject(object):
class PrivateObject(object):
def __init__(self, public):
self.public = public
def private1(self):
print "a private method, not visible outside the public wrapper on", id(self.public)
def __init__(self):
self._private = self.PrivateObject(self)
def public1(self):
print "a public method, which invokes a private one"
return self._private.private1()
a = PublicObject()
print dir(a) # only shows public1, not private1; won't show private1 in most IDEs autocomplete
a.public1()
a.private1() # raises an exception
a._private.private1() # still possible to call private methods, but obvious when you are doing so
如果您希望ProtectedObject在继承链上具有可见性,请创建一个类似的_protected属性,并使用__getattr__访问{}上的属性和方法。在
顺便说一句,您所要求的实际上是Python哲学之外的,通过一个复合对象添加这种间接寻址将导致性能损失。在