变量是全局变量和本地变量

时间:2015-12-23 23:21:16

标签: python

这是我的代码:

class Person:
  def __init__(self, name):
      global name
      self.name = name

  def greet(self, color):
      return "Hi, my name is {0}, and my favorite color is {1}".format(name, color)

当我尝试运行这个时,我得到一个错误,'name'既是全局的又是本地的,但如果我拿走“全局名称”,我会收到一个错误,指出没有定义全局'name'名称。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

你想:

def greet(self, color):
  return "Hi, my name is {0}, and my favorite color is {1}".format(self.name, color)

(请注意self.之前的name)。

没有global name

错误说name未定义是因为greet编译器不知道name是什么。它在构造函数中已知,并分配给self.name,以及您应该如何引用它。

global关键字与您的问题无关,在这种情况下您应该避免使用它(考虑阅读its documentation)。

答案 1 :(得分:1)

删除全局声明。你几乎肯定不想要那个,因为不同的"人" (实例)应具有不同的名称。它们不应该共享相同的全局名称unless you're modelling something really strange here

所以,你只想让name成为班级的一个属性。然后,您还需要greet方法中将其作为类的属性进行访问,ergo:

class Person:
  def __init__(self, name):
      self.name = name

  def greet(self, color):
      return "Hi, my name is {0}, and my favorite color is {1}".format(
          self.name, color
      )

您也可以考虑将color作为属性,并将其从argspec中取出来进行问候。