-1
name = "james"
class Hello:
    global name
    def __init__(self,namek):
        name = namek
        print name
    def sayhi(self):
        print 'Hello my name is', name
a = Hello('john')
a.sayhi()

这里为什么在调用 a.sayhi() 时全局变量名称没有更改为 john,如下面的代码中 x 的值更改为 2

x = 50
def func():
    global x
    print('x is', x)
    x = 2
    print('Changed global x to', x)
func()
print('Value of x is', x)
4

2 回答 2

2

您需要在方法中声明全局,而不是在类范围内:

class Hello:
    def __init__(self, namek):
        global name
        name = namek
        print name
于 2013-04-11T08:56:31.653 回答
0

我想我应该添加这个,因为 Martijn 已经回答了你的问题。global要在没有关键字的情况下执行您正在执行的操作,您将执行以下操作:

class Hello:
    def __init__(self, namek):
        self.name = namek
        print self.name
    def sayhi(self):
        print 'Hello my name is', self.name
        return self.name

运行时:

>>> name = "james"
>>> print name
james
>>> a = Hello('john')
john # Because we did print self.name in the __init__()
>>> name = a.sayhi()
Hello my name is john
>>> print name
john
于 2013-04-11T09:38:05.473 回答