Buduję projekt, który wymaga globalnego udostępniania danych. Zbudowałem klasę GlobalDataBase do obsługi tych danych, która jest podobna do tej z How do I avoid having class data shared among instances? i https://docs.python.org/2/tutorial/classes.html. Jednak znalazłem dla mnie coś dziwnego. Mój kod wygląda następująco:Udostępnianie danych globalnych w języku Python
class GlobalDataBase:
a = []
def copy_to_a(self, value):
self.a = value
def assign_to_a(self, value):
for idx in range(0, len(value)):
self.a.append(value[idx])
def test_copy():
gb1 = GlobalDataBase()
gb1.copy_to_a([1,2])
print gb1.a
gb2 = GlobalDataBase()
print gb2.a
def test_assign():
gb1 = GlobalDataBase()
gb1.assign_to_a([1,2])
print gb1.a
gb2 = GlobalDataBase()
print gb2.a
Wyjście test_copy
jest
[1,2]
[]
Wyjście test_assign
jest
[1,2]
[1,2]
Efektem drugiej metody jest to, czego się spodziewałem. Ale nie mogłem zrozumieć, dlaczego pierwsza metoda nie działa. Czy ktokolwiek mógłby wyjaśnić różnicę między tymi dwoma metodami?
O swojej 'metody assign_to_a': więcej pythonic byłoby napisać' dla elementu wartość: self.a.append (element) '. – GingerPlusPlus