假设我有一个类ClassName
,其中包含一个方法Met
。此外,var
中还需要一个全局变量Met
。
var=1
class ClassName():
def __init__(self):
# ...
#some other methods that do not need global variable here
def Met():
#do some other stuff that needs the global var
以下表格中哪些(如果有)正确/更好?
""" Approach one """
var=1
class ClassName():
def __init__(self):
# ...
#some other methods that do not need global variable here
def Met():
# needs the global var to operate
global var
# do some stuff with var (including editing)
""" Approach two"""
var=1
class ClassName(var):
def __init__(self):
# ...
#some methods that do not need global variable here
def Met(var):
# do some stuff with var (including editing)
我已经更新了我的问题。现在我的问题涉及类和方法而不是函数内的函数(这不是常见的,也不是推荐的)。
答案 0 :(得分:0)
我总是更喜欢方法2,以防止可能滥用全局变量。一般情况下,我会尽量避免使用全局变量,因为大型项目总是存在风险,您可能会错误地重新定义或分配值。
您可以在this answer中阅读有关Python中作用域规则的更多信息。
可以在this answer中找到更多全局变量为邪恶且应该避免的原因。
编辑:编辑后,我仍然建议您尝试避免全局变量,您的问题归结为。
答案 1 :(得分:0)
执行以下操作时:
var=1
def func1():
#do some stuff
#do not need global variable here
def func2():
#do some other stuff
# need the global var
func2() # call func2
var
已经是一个全局变量。如果您不想要,可以选择不在func2
之外使用它。您不需要像在方法1中那样在func2
内明确声明它是全局的。选择方法2的一个原因是您希望var
更改或重新分配。
通常,您可能还想避免嵌套函数。 this answer中有关详细信息。