Почему нельзя поменять переменную родительского класса через функцию
Добрый день. Прошу подсказать или дать ссылку где бы объяснялось почему происходит следующее:
- Первый пример кода:
class parent:
x = 1
def change_all(self, value):
parent.x = value
parent.change_all(3)
Получаем ошибку в Pycharm:
TypeError: parent.change_all() missing 1 required positional argument: 'value'
- Второй пример кода:
class parent:
x = 1
def change_all(self, value):
parent.x = value
child = parent()
child.change_all(3)
Никаких ошибок нет, все работает, x меняется на 3.
Вопрос: почему можно поменять х через функцию выполненную для объекта класса, но нельзя через функцию для самого класса? Подозреваю что это связано с принципами ООП, но объяснение именно вот этого момента найти не смог, прощу поделиться ссылкой или дать направление куда смотреть
Ответы (1 шт):
Для того чтобы первый пример работал, вам нужно сделать метод либо классовым, либо статическим, тогда всё будет функционировать нормально, выглядеть это будет вот так для метода класса:
class parent:
x = 1
@classmethod
def change_all(cls, value):
parent.x = value
parent.change_all(3)
print(parent.x)
Вывод
3
Или же если делать метод статическим:
class parent:
x = 1
@staticmethod
def change_all(value):
parent.x = value
parent.change_all(3)
print(parent.x)
Вывод
3