Изменение глобальных переменных внутри метода класса


Когда я пытаюсь выполнить приведенный ниже код, first_list изменяется, в то время как во втором списке изменений не происходит. Есть ли способ заменить внешний список совершенно новым списком, или вызов методов списка-это единственное, что мне разрешено делать из методов внутреннего класса? Я попытался добавить глобальное ключевое слово перед операцией присваивания, но это приводит к синтаксической ошибке.

first_list = []
second_list = []


class MyClass:

    def change_values(self):
        first_list.append('cat')
        second_list = ['cat']

 test = MyClass()
 test.change_values()
 print(first_list)
 print(second_list)
2   2  

2 ответа:

Во-первых: это почтиНикогда хорошая идея иметь глобальные переменные с изменяемым состоянием. Переменные уровня модуля следует использовать в качестве констант или синглетов. Если вы хотите изменить значение переменной, вы должны передать его в качестве параметра функции, а затем вернуть новое значение из функции.

Сказал, что ответ на ваш вопрос будет либо:

first_list = []
second_list = []


class MyClass:
    def change_values(self):
        first_list.append('cat')
        second_list[:] = ['cat']

test = MyClass()
test.change_values()
print(first_list)
print(second_list)

Или:

first_list = []
second_list = []


class MyClass:
    def change_values(self):
        first_list.append('cat')
        global second_list
        second_list = ['cat']

test = MyClass()
test.change_values()
print(first_list)
print(second_list)

Используйте глобальное ключевое слово внутри функции