这是我的代码:
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'名称。我该如何解决这个问题?
答案 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中取出来进行问候。