如何从同一类中更新全局变量?Python



问题语句:如何从同一类中更新全局变量,例如' this' in Java?

代码示例:

class XYZ(object):
    response = "Hi Pranjal!";
    def talk(response):
       self.response = response;          #Class attribute should be assiged Anand value!
    talk("Hi Anand!");
    print response;

输出应为:嗨,阿南德!

注释:错误!'self'未定义!

如何通过在同一类中调用该函数(谈话)来更新全局变量(响应)。我了解使用自我,我需要通过一个对象,但是我无法在同一类中创建类的实例吗?帮助。

您可能会尝试做不同的事情,您可能需要对Python本身进行更多的研究,但让我们看看这是否有帮助:

如果您想拥有一个实例共同响应的类,则可以拥有类似的东西:

class XYZ(object):
    response = "Hi Pranjal!"; # class atribute
    def change_talk(self, response):
        # class methods always get `self` (the object through which they are
        # called) as their first argument, and it's commons to call it `self`.
        XYZ.response = response  # change class atribute
    def talk(self):
        print XYZ.response
XYZ_inst = XYZ() # instance of the class that will have the class methods
XYZ_inst.talk() # instance "talks"
#"Hi Pranjal!"
XYZ_inst.change_talk("Hi Anand!");
XYZ_inst.talk()
#"Hi Anand!"
XYZ_inst_2 = XYZ()
## New instance has the same response as the previous one:
XYZ_inst_2.talk()
#"Hi Anand!"
## And changing its response also changes the previous:
XYZ_inst_2.change_talk("Hi Bob!")
XYZ_inst_2.talk()
#"Hi Bob!"
XYZ_inst.talk()
#"Hi Bob!"

另一方面,如果您希望每个实例都有自己的响应(请参阅有关__init__的更多信息):

class XYZ2(object):
    # you must initialise each instance of the class and give
    # it its own response:
    def __init__(self, response="Hi Pranjal!"):
        self.response = response
    def change_talk(self, response):
        self.response = response;
    def talk(self):
        print self.response
XYZ_inst = XYZ2() # object that will have the class methods
XYZ_inst.talk()
#"Hi Pranjal!"
XYZ_inst.change_talk("Hi Anand!");
XYZ_inst.talk()
#"Hi Anand!"
XYZ_inst_2 = XYZ2()
## new instance has the default response:
XYZ_inst_2.talk()
#"Hi Pranjal!"
## and changing it won't change the other instance's response:
XYZ_inst_2.change_talk("Hi Bob!")
XYZ_inst_2.talk()
#"Hi Bob!"
XYZ_inst.talk()
#"Hi Anand!"

最后,如果您真的想拥有一个全局变量(对于更改类实例之外的任何内容而不建议您将其作为参数将其传递给方法):

):
# global variable created outside the class:
g_response = "Hi Pranjal!"
class XYZ3(object):
    def change_talk(self, response):
        # just declare you are talking with a global variable
        global g_response
        g_response = response  # change global variable
    def talk(self):
        global g_response
        print  g_response

XYZ_inst = XYZ3() # object that will have the class methods
XYZ_inst.talk()
#"Hi Pranjal!"
XYZ_inst.change_talk("Hi Anand!");
XYZ_inst.talk()
#"Hi Anand!"
print g_response
#"Hi Anand!"

相关内容

  • 没有找到相关文章