2016-09-27 104 views
0

我试图在__Team类的构造函数中创建一个__Profile类的实例,但我无法访问__Profile。我应该怎么做?python - 嵌套类访问修饰符

这是我的代码

class SlackApi: 
    # my work 
    class __Team: 
     class __Profile: 
      def get(self): 
       # my work 
     def __init__(self, slackApi): 
      self.slackApi = slackApi 
      self.profile = __Profile() 
      self.profile = __Team.__Profile() 
      self.profile = SlackApi.__Team.__Profile() 
      # I tried to all of these case, but I failed 
      # I need to keep '__Team', '__Profile' class as private class 

我的Python版本是3.5.1

+2

为什么使用嵌套类和'__mangled_names'呢? *“我需要保留'__Team','__Profile'类作为私人类”* - 为什么? – jonrsharpe

+0

当您尝试以不支持它们的语言实现访问修饰符(或任何其他功能)时,您会实现两件事:1)您得不到令人满意的结果; 2)您不从语言的功能中受益支持。这有点像在自行车上滑雪:比滑雪还差,比骑自行车还糟糕。 – zvone

回答

1

Python没有访问修饰符。如果您尝试像传统的private访问修饰符那样对待__,这是您遇到的问题之一。导致双下划线会导致名称损坏 - 在class Foo(或class __FooFoo之前的任意数目的下划线)内的名称__bar将被修改为_Foo__bar

如果你真的想保持这些领先的双下划线,你必须明确裂伤的名字自己:

self.profile = SlackApi._SlackApi__Team._Team__Profile() 

这也是你将如何从SlackApi外部访问__Profile类干脆,所以你基本上绕过了任何这些东西都是私人的伪装。

0

您可以访问像这样:

SlackApi._SlackApi__Team._Team__Profile 

或像这样:

self._Team__Profile 

但这是错误的。为了您的方便,不要让他们成为私人课程。