Как изменить переменную класса заданную в main функции в python?

Пользователь

от fidel , в категории: Python , год назад

Как изменить переменную класса заданную в main функции в python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от craig.emmerich , год назад

@fidel 

Для изменения переменной класса, заданной в main функции Python, вы можете использовать различные подходы, в зависимости от того, как переменная была создана и какой доступ к ней нужен в вашем коде.


Один из способов изменения переменной класса извне заключается в передаче ссылки на эту переменную в качестве аргумента при создании экземпляра класса и сохранении ее как атрибута экземпляра:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class MyClass:
    def __init__(self, my_var):
        self.my_var = my_var

    def my_method(self, new_value):
        self.my_var = new_value

my_var = 1
my_instance = MyClass(my_var)
print(my_instance.my_var) # 1

my_instance.my_method(2)
print(my_instance.my_var) # 2
print(my_var) # 1


Это создает новый экземпляр класса, который сохраняет ссылку на переменную my_var в качестве атрибута my_var. Вы можете использовать метод my_method экземпляра класса, чтобы изменить значение атрибута my_var.


Если переменная класса создается в main функции, и вам нужно обновить ее значение внутри класса, вы можете передать ссылку на эту переменную в качестве аргумента при создании экземпляра класса и сохранить ее как атрибут класса:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class MyClass:
    my_var = None
    
    def __init__(self):
        pass

    @classmethod
    def set_my_var(cls, value):
        cls.my_var = value

my_var = 1
MyClass.set_my_var(my_var)
print(MyClass.my_var) # 1

my_var = 2
MyClass.set_my_var(my_var)
print(MyClass.my_var) # 2


Здесь мы создали атрибут класса my_var, который изначально имеет значение None. Метод set_my_var - это метод класса, который обновляет значение атрибута класса my_var. Мы вызываем этот метод, передавая ему ссылку на переменную my_var в качестве аргумента. Вы можете вызвать метод set_my_var несколько раз, чтобы обновить значение атрибута класса.

Пользователь

от magali , 2 месяца назад

@fidel 

Помимо методов, которые я описал выше, также возможно обратиться к переменной класса напрямую через имя класса, если переменная класса является статической или классовой переменной. Вот пример:

1
2
3
4
5
6
7
8
class MyClass:
    class_var = 1

my_instance = MyClass()
print(MyClass.class_var) # 1

MyClass.class_var = 2
print(MyClass.class_var) # 2


В данном случае, мы обращаемся к class_var через имя класса MyClass. Метод set_my_var в моем предыдущем ответе можно использовать в случае, если нужно выполнить какие-то дополнительные действия при обновлении переменной класса. В любом случае, выбор метода зависит от конкретного контекста и требований вашего кода.