有没有办法在类和嵌套类之间共享成员变量?
例如
class Base(object):
class __Internal(object):
def __init__(self, parent):
self.__parent = parent
self.__parent.__private_method()
#
def __init__(self):
self.__internal = Base.__Internal(self)
return
def __private_method(self):
print "hurray"
return
如果名称 ==“主要”: b = Base()`
有没有办法让__Internal类访问父类的成员?
我正在寻找像父.__ vars / __方法这样的私人会员。
我已编辑代码以更好地解释这一点。运行此代码抛出
AttributeError: 'Base' object has no attribute '_Internal__private_method'
答案 0 :(得分:0)
您必须使用BaseClassName.methodname(self,arguments)或BaseClassName.field
示例(非常难看的代码):
class Base(object):
some_field = "OK"
class Internal(object):
def __init__(self, parent):
self.__parent = parent
def change_some_field(self):
Base.some_field = "NOP"
def __init__(self):
self.__private = "val"
self.__internal = Base.Internal(self)
def show_field(self):
print self.some_field
def change_some_field(self):
self.__internal.change_some_field()
def main():
a = Base()
a.show_field()
a.change_some_field()
a.show_field()
return 0
if __name__ == '__main__':
main()
您可以在Why are Python's 'private' methods not actually private?
找到非常有用的资源答案 1 :(得分:0)
要访问私有方法,而不是:
self.__parent.__private_method()
使用它:
self.__parent._Base__private_method()
修改了你的例子:
class Base(object):
class __Internal(object):
def __init__(self, parent):
self.__parent = parent
self.__parent._Base__private_method()
def __init__(self):
self.__internal = Base.__Internal(self)
return
def __private_method(self):
print "hurray"
return
if __name__ == "__main__":
b = Base()
结果是:
hurray