Найти Stati c, экземпляр и локальные переменные в этом python коде - PullRequest
0 голосов
/ 22 февраля 2020

Вот вопрос кода python, заданного в тесте InfyTQ.

class classOne:
  __var_one = 1001

  def __init__(self,var_two):
     self.__var_two = var_two
     self.__var_five = 5

  def method_one(self):
     var_four = 50
     self.__var_five = ClassOne.__var_one + self.__var_two + var_four

Теперь я хочу спросить, следует ли считать переменную self.__var_five функции method_one новой переменная экземпляра или нет? Поскольку функция self.__var_five в __init__ уже существует.

Кроме того, я изучил понятие глобальной, локальной, stati c и переменной экземпляра из приведенного ниже кода. Это правильно?

#global, local, static, instance variable.
#global variable are defined at the top of program or defined using keyword:global

global global_var1 = 0
global_var2 = 1

def local_variable:
    #local variable are defined inside of a function.
    local_var1 = 2

class static_instance:
    #static/classs variable are defined inside of a class.
    static_var1 = 3

    def __init__(self):
        #all variables defined in the function of a class starting with self.
        self.instance_var1 = 4

    def static(self):
        self.instance_var2 = 5

        local_var2 = 6         #local variable as it is in a function.

    static_var2 = 6

1 Ответ

1 голос
/ 22 февраля 2020

Это та же переменная экземпляра (называется атрибут в Python). method_one просто обновляет свое значение.

Большинство ваших пониманий во втором блоке кода верны. Однако когда метод делает:

self.static_var1 = 4

, он создает атрибут экземпляра с именем static_var1. Это не зависит от атрибута класса, который был объявлен вне методов, который используется всеми экземплярами, которые не переназначают его. Но так как вы выполняете присваивание в методе __init__(), все экземпляры получают свой собственный атрибут. Единственный способ получить доступ к значению stati c будет с помощью static_instance.static_var1.

...