2011-01-09 68 views
8

是否有一種方法可以在類中保留私有類變量,並仍將其用作非默認變量的默認值(而不是在之前定義該值,類)?在python中使用類變量作爲非默認參數

例如:

class a: 
    def __init__(self): 
     self.__variable = 6 
    def b(self, value = self.__variable): 
     print value 
+5

Python做**不**有私有類變量。完全一樣。你正在使用的雙下劃線確實不會讓變量變爲私人的,它只是爲了避免名稱衝突而改名。 除非你知道爲什麼你必須使用雙下劃線,否則不要使用雙下劃線。 ;) – 2011-01-09 08:03:41

+0

偉大的問題! (那麼,它解決了我的一個巨大問題,所以...) – nchpmn 2011-06-08 10:59:07

回答

14

你將得太多問題:

class a: 

    def __init__(self): 
     self.__variable = 6 

    def b(self, value=None): 
     if value is None: 
      value = self.__variable 
     print value 
+0

哇。我失敗了。謝謝! – calccrypto 2011-01-09 06:57:22

4
  1. self.__variable是一個實例變量,而不是一類變量。
  2. 因爲默認參數在功能方法定義時評價,你不能用一個實例變量作爲默認參數 - 至少不是直接(慣用的伎倆,默認爲None和添加if arg is None: arg = real_default的函數體,不工作)。
  3. 領先的雙下劃線並不意味着「私人」,他們的意思是「名字搗亂,惹麻煩」。如果你不確切地知道我的意思,你根本不應該使用這個「功能」。預期的用途是而不是私人成員 - 爲此使用一個下劃線。
3

,如果你想None是在允許的參數範圍內值得加入到這個,你可以創建一個不習慣於代碼中的任何其他目的的自定義前哨值。如果不這樣做,value,None永遠不能從b返回。

UseDefault = object() 

# Python 3? Otherwise, you should inherit from object unless you explicitly 
# know otherwise. 
class a:  
    def __init__(self): 
     self._variable = 6 

    def b(self, value=UseDefault): 
     if value is UseDefault: 
      value = self._variable 
     print value 

現在None可以傳遞給b不會導致默認被used.`

相關問題