Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## 物件參數的使用
- 你可能會遇到,當物件參數需要預設給一個值時到底要給可變參數還是給一個 None 值?這個問題牽涉到 Python 設計的觀念 `object`,萬物都是一個 `object`
- 所以當你產生一個 function 這個預設的參數值就產生了。我們用底下一個範例來說明:
- ```python
- class Foo:
- def __init__(self, l=[]):
- self.l = l
- class Bar(Foo):
- def __init__(self):
- Foo.__init__(self)
- if __name__ == '__main__':
- f = Foo()
- b = Bar()
- f.l.append(5566)
- print(b.l)
- ```
- 如果你這樣做印出的 `b.l` 竟然是 `[5566]` 這太讓人驚訝了吧!?難道是什麼神奇的鬼魂在作怪?其實不是,因為 `l` 這個參數是使用一個可變變數 []
- 所以當你建立一個 f 的 `Foo()` 物件時他的預設參數也就產生了,因此當你建立 b 的 `Bar()` 物件時他其實是指向同一個記憶體位址。
- 那正確做法應該怎麼做呢?應該將 l 的變數設定為一個不可變的變數 None. 這樣才不會出現幽靈事件!
- ```python
- class Foo:
- def __init__(self, l=None):
- if l is None:
- self.l = []
- else:
- self.l = l
- class Bar(Foo):
- def __init__(self):
- Foo.__init__(self)
- if __name__ == '__main__':
- f = Foo()
- b = Bar()
- f.l.append(5566)
- print(b.l)
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement