在类方法中传递变量vs使用全局变量

时间:2018-04-17 11:16:56

标签: python global-variables

假设我有一个类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) 

PS

我已经更新了我的问题。现在我的问题涉及类和方法而不是函数内的函数(这不是常见的,也不是推荐的)。

2 个答案:

答案 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中有关详细信息。