2015-12-02 70 views
2

我處於這樣一種情況,即函數返回的結構可能不需要在該函數之外的任何地方使用。然而,因爲它不是一個簡單的值,而是一個實際的對象,所以我想在我的函數中聲明一個類,然後我可以實例化並返回。Python的最佳實踐:函數中的類定義?

如:

def CreateSomeFunkyDataStructure(): 

    class FunkyClass: 
     def __init__(self): 
      self.var1 = 'Play that funky music white boy.' 

     def getFunky(self): 
      print 'Play that funky music right.' 


    x = FunkyClass() 

    return x 


o = CreateSomeFunkyDataStructure() 

print o.var1 
o.getFunky() 

我的問題是,這是否是一個很好的做法還是因爲這一個壞的只是感覺奇怪。同時,在我看來,因爲封裝的目的是阻止某人訪問函數的實現,在這種情況下,它可能是非常合適的。如果該課程不是該課程其他地方所需要的課程,則該課程的其餘部分無權訪問該課程。

回答

4

這是不好的,因爲它提出了以下突破:

  1. 類型檢查,以isinstance(result, FunkyClass)
    此外,調用CreateSomeFunkyDataStructure多TIEMS的結果甚至不會是同一類型的! (即,type(f1) is not type(f2)
  2. 調用靜態成員,與map(FunkyClass.getFunky, [funcy1, funcy2])
  3. pickle荷蘭國際集團
    這需要類是在模塊範圍內可見 - 甚至嵌套類原因它嗆