Advertisement
Guest User

Untitled

a guest
Feb 19th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. ## 物件參數的使用
  2. 你可能會遇到,當物件參數需要預設給一個值時到底要給可變參數還是給一個 None 值?這個問題牽涉到 Python 設計的觀念 `object`,萬物都是一個 `object`
  3. 所以當你產生一個 function 這個預設的參數值就產生了。我們用底下一個範例來說明:
  4.  
  5. ```python
  6. class Foo:
  7. def __init__(self, l=[]):
  8. self.l = l
  9.  
  10. class Bar(Foo):
  11. def __init__(self):
  12. Foo.__init__(self)
  13.  
  14. if __name__ == '__main__':
  15. f = Foo()
  16. b = Bar()
  17. f.l.append(5566)
  18. print(b.l)
  19. ```
  20. 如果你這樣做印出的 `b.l` 竟然是 `[5566]` 這太讓人驚訝了吧!?難道是什麼神奇的鬼魂在作怪?其實不是,因為 `l` 這個參數是使用一個可變變數 []
  21. 所以當你建立一個 f 的 `Foo()` 物件時他的預設參數也就產生了,因此當你建立 b 的 `Bar()` 物件時他其實是指向同一個記憶體位址。
  22.  
  23.  
  24. 那正確做法應該怎麼做呢?應該將 l 的變數設定為一個不可變的變數 None. 這樣才不會出現幽靈事件!
  25. ```python
  26. class Foo:
  27. def __init__(self, l=None):
  28. if l is None:
  29. self.l = []
  30. else:
  31. self.l = l
  32.  
  33. class Bar(Foo):
  34. def __init__(self):
  35. Foo.__init__(self)
  36.  
  37. if __name__ == '__main__':
  38. f = Foo()
  39. b = Bar()
  40. f.l.append(5566)
  41. print(b.l)
  42. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement