【发布时间】:2016-08-04 16:52:18
【问题描述】:
是我遗漏了什么,还是这样的事情不可能?
class Outer:
def __init__(self, val):
self.__val = val
def __getVal(self):
return self.__val
def getInner(self):
return self.Inner(self)
class Inner:
def __init__(self, outer):
self.__outer = outer
def getVal(self):
return self.__outer.__getVal()
foo = Outer('foo')
inner = foo.getInner()
val = inner.getVal()
print val
我收到此错误消息:
return self.__outer.__getVal()
AttributeError: Outer instance has no attribute '_Inner__getVal'
【问题讨论】:
-
跟我重复一遍:Python 不是 Java。除非您想避免子类发生冲突,否则不要使用类私有名称。没有像 Python 中那样的方法隐私概念。你不需要使用内部类来获得特权访问。
-
也就是说,不要使用内部类,使用 single 下划线表示不被外部用户使用的 API 内部方法。
-
有可能,但不是微不足道的,请在stackoverflow.com/questions/2024566/…查看答案
-
@JoãoPinto:不同的问题,尽管也源于使用嵌套类。 OP 通过传入对外部类实例的引用已经避免了这个问题。
标签: python function class inheritance private