-
Notifications
You must be signed in to change notification settings - Fork 0
[地雷] class 成員屬性,最好只宣告,不要定義
tsungjung411 edited this page Sep 5, 2018
·
3 revisions
-
宣告(declaration):只定義「變數型別」和「變數名稱」,不包含「給予初始值」。對 python 來說,只有「變數名稱」。
- int x;
- int *x_ptr;
- char ch;
-
定義(definition):除了可包含宣告的動作之外,必須包含「給予初始值」,將「變數的值」儲存至「變數記憶體」裡。
- int x = 0;
- int x; <-- 先宣告
x = 0; <-- 後定義
程式碼
class FruitList:
__name_list = []
def append(self, name):
self.__name_list.append(name)
# end-of-def
def __repr__(self):
return repr(self.__name_list)
# end-of-def
# end-of_class
a = FruitList()
a.append('apple')
a.append('banana')
a.append('cherry')
print(a)
b = FruitList()
b.append('apple')
b.append('banana')
b.append('cherry')
print(b)
執行結果:
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry', 'apple', 'banana', 'cherry'] <--- 非預期結果
程式碼
class FruitList:
__name_list = None
def __init__(self):
self.__name_list = []
# end-of-def
# end-of-class
tj_tsai / tsungjung411@yahoo.com.tw / tsungjung411@gmail.com