尝试在类内的实例变量中使用Self时未定义“Self”

2024-03-28 14:12:51 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样的代码

class A:
  var1 = self.var0

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

我该怎么办自身变量0不把var1放在init函数中?你知道吗


Tags: 函数代码selfinitdefclassvar1var0
3条回答

请尝试以下操作:

class A:

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

但是,我看不出这有什么意义,我更愿意像这样立即初始化它:

class A:

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

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

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

你有两个选择,我可以想到:

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

class A:

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

2)若您真的不想在init函数中使用var1,可以创建一个属于类的函数,如下所示:

class A:

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

  def setVar1(var1):
    self.var1 = var1

然后要创建一个对象并将其v1值设置为v0,可以执行以下操作:

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

编辑:

3)如“Blckknght”在对另一个答案的评论中所建议的:你可以链接赋值语句:

self.var0 = self.var1 = var0

相关问题 更多 >