2016-09-27 112 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 

但這是錯誤的。爲了您的方便,不要讓他們成爲私人課程。