«Self» не определено при попытке использовать self в переменной экземпляра в классе

python

105 просмотра

3 ответа

12 Репутация автора

Допустим, у меня есть такой код

class A:
  var1 = self.var0

  def __init__(self, var0):
    self.var0 = var0

как я могу получить self.var0 в var1, не помещая var1 в функцию init?

Автор: user6586806 Источник Размещён: 15.07.2016 10:56

Ответы (3)


0 плюса

1716 Репутация автора

Попробуйте это вместо этого:

class A:

  def __init__(self, var0):
    self.var1 = self.var0 = var0

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

class A:

  def __init__(self, var0):
    self.var1 = var0

Если вы хотите иметь две переменные с одинаковым значением, придерживайтесь первого метода.

Автор: Vaibhav Bajaj Размещён: 15.07.2016 11:02

1 плюс

31 Репутация автора

Решение

У меня есть два варианта:

1) Включите его в функцию init, если вы хотите, чтобы объект A создавался с A.var1 = var0:

class A:

  def __init__(self, var0):
    self.var0 = var0
    self.var1 = self.var0

2) Если вы действительно не хотите использовать var1 внутри функции init, вы можете создать функцию, которая является частью класса A, следующим образом:

class A:

  def __init__(self, var0):
    self.var0 = var0

  def setVar1(var1):
    self.var1 = var1

Затем, чтобы создать объект A и установить его значение v1 равным v0, вы должны сделать что-то вроде этого:

v0 = some_value
a = A(v0)
a.setVar1(v0)

Редактировать:

3) Как предложено «Blckknght» в комментариях к одному из других ответов: Вы можете связать операторы присваивания:

self.var0 = self.var1 = var0
Автор: Andrew Reeves Размещён: 15.07.2016 11:10

0 плюса

674 Репутация автора

Ваш код var1 = self.var0находится на уровне класса, а не на уровне экземпляра, поэтому selfздесь нет смысла. Чтобы увидеть это, попробуйте это:

class C(object):
    field1 = 1

    def __init__(self):
        self.field2 = 2

print(C.field1)
print(C.field2) # should raise an exception
instance = C()
print(instance.field1) # not found in instance but found at upper level (class-level)
print(instance.field2)
Автор: λuser Размещён: 15.07.2016 11:12
Вопросы из категории :
32x32