Найти - Пользователи
Полная версия: Вопрос про classmethod
Начало » Python для экспертов » Вопрос про classmethod
1
AIP
Здравствуйте.
У нас есть класс
 class A:
    foo = 1
    @classmethod
    def change_foo(cls, value):
        cls.foo = value

Создаем несколько экземпляров этого класса
 a = A()
 b = A()
 c = A()

Для всех созданных классов значение foo будет равно 1.
Далее в одном из этих классов меняем значение
 a.foo = 2
Соответственно значение foo в классе b и с осталось неизменным и равно 1, а в классе a изменилось на 2.
Теперь при помощи функции change_foo меняем переменную. Менять можно как через класс, так и через объект, результат не меняется.
 a.change_foo(3)
или
 b.change_foo(3)
или
 A.change_foo(3)

В итоге имеем, что в классе “b” и “c” значение поменялось на новое(3), а в классе “a” нет(осталось значение 2). Почему это происходит?

Egorro13
  a.foo = 2
Как работают классы в Питоне, еще до конца не понимаю, но здесь, судя по всему, ты создаешь поле foo уже у объекта а: у поля класса одно значение, у поля объекта - другое
py.user.next
AIP
Почему это происходит?
Потому что объекты b и c всё ещё используют переменную класса A, а объект a с самого начала использует переменную экземпляра a. Когда ты присвоил a.foo значение, это имя отвязалось от класса и привязалось к экземпляру.

Здесь довольно размазанная инфа, но если всю главу читаешь целиком и с разбором (помня предыдущие главы), то всё понятно про переменные класса и экземпляра
DIP3. переменные экземпляра
DIP3. переменные класса
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB