尝试在类中使用self in instance变量时,未定义“Self”

时间:2016-07-15 22:56:03

标签: python

我们说我有这样的代码

class A:
  var1 = self.var0

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

如何在不将var1放入init函数的情况下将self.var0转换为var1?

3 个答案:

答案 0 :(得分:1)

我有两个选择:

1)如果要使用A.var1 = var0创建A对象,请将其包含在init函数中:

class A:

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

2)如果你真的不想在init函数中使用var1,你可以像这样创建一个属于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

答案 1 :(得分:0)

请改为尝试:

class A:

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

但是,我没有看到太多的意义,而只是简单地将其初始化为:

class A:

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

如果您希望两个变量具有相同的值,请坚持使用第一种方法。

答案 2 :(得分:0)

在您的代码中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)