【问题标题】:Calling variables in the same class with python用python调用同一个类中的变量
【发布时间】:2018-06-03 14:21:06
【问题描述】:

我试图在同一个类的另一个函数中调用一个函数中定义的变量,但 self 不起作用。

class Project():
    def function1(self):
        a='hello world,'

    def function2(self):
        b=self.a + ' I am alive'

Project1=Project()
print Project1.function1()
print Project1.function2()

python 说:Project instance has no attribute 'a'.

我不太清楚如何使用类。我没有使用__init__,因为我没有什么可放的,即使我正式不需要它,是否有办法添加它?

感谢您的帮助。

【问题讨论】:

  • function1a 是本地的。你可能想要self.a='hello world, '
  • 所以,如果我想打印function2,我应该将function1中的a定义为self.a?
  • 是的。在您的代码中,self.a(对象self 的属性a)从未被定义。 function1 中的 a 是局部变量。见Classes - Python Scopes and Namespaces
  • 感谢大家 ;) 现在终于可以了

标签: python class variables


【解决方案1】:

你需要的是:

    def function1(self):
      self.a = 'hello world, '

function1 中,a 是某人所说的局部变量,而self.a 是附加到您当前对象的属性。

【讨论】:

  • 我需要使用 init,还是在课堂上不是必须的?
  • 它按原样工作。如果您想在对象创建(实例化)后立即设置self.a,则只需要__init__
【解决方案2】:

您的 ab 变量是本地变量。您只能在方法范围内使用这些变量。如果你想要一个类属性(与所有类共享),你必须设置self.a = ...self.b = ...。 在 python 中没有必要创建构造方法__init__ 也不初始化这些属性。 但是在您的示例中,如果您在function1 之前调用functions2,它将崩溃,因为您使用的是一个不存在的属性。然后建议初始化属性。 您可以像这样初始化属性:

class Project:
    a = ''
    b = ''

    def function1(self):
        self.a='hello world,'

    def function2(self):
        self.b=self.a + ' I am alive'

更多注意事项:
1.变量为小写和snake大小写:project1 = Project()
2. 你的打印不会打印任何东西,因为你的函数不返回任何东西。你必须返回类似的东西:

def function1():
    return 'hello world,'

或者如果您需要设置 a 并打印:

def function1():
    self.a = 'hello world,'
    return self.a

【讨论】:

    【解决方案3】:

    function1(self) 中,您需要将a= 更改为self.a=。在您的原始代码中,您创建了一个局部变量 a,您需要显式使用 self 将变量 a 附加到对象的实例并在函数调用中保持持久性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多