如何从同一个 class 中更新全局变量? Python
How to update a global variable from within the same class ? Python
问题陈述: 如何从同一个 class 中更新全局变量,例如 this' 34=] ?
代码示例:
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'未定义!
如何通过在同一个 class 中调用该函数(对话)来更新全局变量(响应)。我了解使用 self,我需要传递一个对象,但我不能在同一个 class 中创建 class 的实例,对吗?帮助。
您可以尝试做不同的事情,您可能需要 research a little bit more 关于 python 本身,但让我们看看这是否有帮助:
如果你想要一个 class 的实例共享一个共同的响应,你可以这样:
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!"
另一方面,如果您希望每个实例都有自己的响应 (see more about __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 (which is not really advised 来改变 class 实例之外的任何东西,你应该将它作为参数传递给改变它的方法):
# 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!"
问题陈述: 如何从同一个 class 中更新全局变量,例如 this' 34=] ?
代码示例:
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'未定义!
如何通过在同一个 class 中调用该函数(对话)来更新全局变量(响应)。我了解使用 self,我需要传递一个对象,但我不能在同一个 class 中创建 class 的实例,对吗?帮助。
您可以尝试做不同的事情,您可能需要 research a little bit more 关于 python 本身,但让我们看看这是否有帮助:
如果你想要一个 class 的实例共享一个共同的响应,你可以这样:
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!"
另一方面,如果您希望每个实例都有自己的响应 (see more about __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 (which is not really advised 来改变 class 实例之外的任何东西,你应该将它作为参数传递给改变它的方法):
# 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!"