繁体   English   中英

如何使用类属性而不是全局变量?

[英]How to use a class attribute instead of a global variable?

我想拥有一个对许多函数通用的变量,所以我考虑使用全局变量,但我发现这是一个坏主意,并且最好与类一起使用,因此我想我们应该使用类属性?

真正的问题是如何从依赖全局变量的程序转到使用类属性的程序?

比方说,我有以下内容:

function.py

my_variable = []

def function1():
    global my_variable
    #then we do something on my_variable
def function2():
    global my_variable
    #then we do something on my_variable

views.py (在烧瓶中):

from function import my_variable
@app.route('/'):
    global my_variable 
    function1()
    function2()
    return my_variable 

我想在一个类中,对于function.py我们会有类似的东西?

class Function:

    my_variable = []
    def __init__(self, variable):
        Function.my_variable = variable
    def function1(self):
    #we do something on Function.my_variable
    def function2(self):
    #we do something on Function.my_variable

这是一个好的开始吗?

关于为什么全局性在Python中如此邪恶的利弊,我将带您参考以下页面,我在不久前研究此内容时就使用了该页面:

为什么全局变量是邪恶的?

我发现有趣的是,我在Visual Studio Code(我选择的IDE)中使用了Python linter,即使正确实现,此linter 始终会突出显示全局变量是一个问题。 在linter错误和我共享的链接中的建议之间,我遵循了您已经提到的相同规则。 在Python中使用变量而不是全局变量。

至于如何使您的全局变量变成类变量? 这很简单。

因此,上面是一个模块,您在其中声明my_variable并将其初始化为空列表。 因此,在一个类中,您可以执行以下操作:

class MyClass:

    def __init__(self):
        self.my_variable = []

或者,如果要在实例化此类的实例时直接将值分配给变量,则还可以执行以下操作:

class MyClass:

    def __init__(self, my_variable):
        self.my_variable = my_variable

因此,现在您可以使用以下方法创建MyClass的实例:

myClass = MyClass() #For the first example OR
myClass = MyClass([]) #For the second example

因此,现在我们要更改MyClassmy_variable部分的值,因此可以执行此操作。 您可以为此使用与全局变量相同的函数样式。 只需注意,为了将my_variable重新分配给my_variable中的新值,在引用它时需要使用self关键字,因为它现在属于class ,如下所示:

def function1(self):
    self.my_variable = #Change the value of my_variable

def function2(self):
    self.my_variable = #Change the value of my_variable again

因此,您的整个class现在看起来像这样:

class MyClass:

    def __init__(self):
        self.my_variable = []

    def function1(self):
        self.my_variable = #Change the value of my_variable

    def function2(self):
        self.my_variable = #Change the value of my_variable again

因此,现在您已经将global变量转换为class变量,但是我们如何使用它呢? 首先,假设您的类MyClass存储在名为my_class.py的文件中。 以Flask方法为例,现在执行以下操作:

from my_class import MyClass

    @app.route('/'):
        myClass = MyClass() 
        myClass.function1()
        myClass.function2()
        return myClass.my_variable

这将完全按照您的需要工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM