Python 如何在模块之间共享方法和数据&;上课?

Python 如何在模块之间共享方法和数据&;上课?,python,class,Python,Class,我需要一些关于模块和类以及如何共享数据和方法的帮助 我已经在一个Python程序上工作了一段时间,它变得太大了,无法以其原始形式处理,因为它没有使用类。该程序大约有6000行,可用于多个屏幕。我认为逻辑上的分类将遵循用户界面,每个屏幕都是自己的类。然后我会有另一个类来存储所有的“全局”数据 到目前为止,所有内容仍在一个文件中,并且正在运行。然而,我现在正试图通过将这些类保存在它们自己的文件中,将它们分解成单独的模块。这就是事情对我来说变得非常糟糕的地方。我已经阅读了很多教程和课文,在StackO

我需要一些关于模块和类以及如何共享数据和方法的帮助

我已经在一个Python程序上工作了一段时间,它变得太大了,无法以其原始形式处理,因为它没有使用类。该程序大约有6000行,可用于多个屏幕。我认为逻辑上的分类将遵循用户界面,每个屏幕都是自己的类。然后我会有另一个类来存储所有的“全局”数据

到目前为止,所有内容仍在一个文件中,并且正在运行。然而,我现在正试图通过将这些类保存在它们自己的文件中,将它们分解成单独的模块。这就是事情对我来说变得非常糟糕的地方。我已经阅读了很多教程和课文,在StackOverflow上看到了很多关于我同样问题的帖子,但我仍然不知道该怎么办

由于我的实际程序太大了,我创建了一个非常简单的程序来显示我需要做什么


    #main.py


    class data:
        def __init__(self):
            self.A = "A"
            self.B = "B"
            self.C = "C"
            self.All = ""


    class module_1:
        def __init__(self):
            place_holder = "something"

        def add_1_2(self):
            d.All = d.A + d.B
            print("new_string=", d.All)


    class module_2:
        def __init__(self):
            place_holder = "something"

        def combine_it_all(self):
            m1.add_1_2()
            d.All = d.All + d.C



    d = data()
    m1 = module_1()
    m2 = module_2()

    m2.combine_it_all()
    print("d.All = ", d.All)
    print("END OF PROGRAM")

上面的程序显示了我希望如何访问其他类中的数据并使用它们的方法。但是,我还需要将程序分解成模块,这样它们就更小,更易于使用。所以,我试着将每个类划分出来,并将其放在自己的文件(模块)中,现在我不知道如何访问来自模块的其他类中的数据或方法。以下是每个文件的详细信息


    #data_p.py

    class data:
        def __init__(self):
            self.A = "A"
            self.B = "B"
            self.C = "C"
            self.All = ""

正如您所看到的,属性和方法有一些问题正在解决,但尚未实例化。不幸的是,我几年前就开始了,当然也不是最聪明的程序员,但我希望有人能告诉我如何让这个简单的示例工作,这样我就可以修复我的实际程序。

问题是类是实例化的,但每个实例都不知道彼此,解决此问题的一种方法是在方法调用中传递引用。
在实际环境中可能做得更好,但通过这些更改,您的示例将起作用:

#module_1_p.py (line 5 changed)

class module_1:
    def __init__(self):
        place_holder = "something"

    def add_1_2(self, d):
        d.All = d.A + d.B
        print("new_string=", d.All)


#module_2_p.py (lines 5 and 6 changed)

class module_2:
    def __init__(self):
        place_holder = "something"

    def combine_it_all(self, m1, d):
        m1.add_1_2(d)
        d.All = d.All + d.C

#main.py (line 9 changed)
from data_p import data
from module_1_p import module_1
from module_2_p import module_2

d = data()
m1 = module_1()
m2 = module_2()

m2.combine_it_all(m1, d)
print("d.All = ", d.All)
print("END OF PROGRAM")

避免使用
global d
,改为
def add_1_2(self,data):
data.All=data.A+data.B

    #module_2_p.py

    class module_2:
        def __init__(self):
            place_holder = "something"

        def combine_it_all(self):
            m1.add_1_2()
            d.All = d.All + d.C


    #main.py

    from data_p import data
    from module_1_p import module_1
    from module_2_p import module_2

    d = data()
    m1 = module_1()
    m2 = module_2()

    m2.combine_it_all()
    print("d.All = ", d.All)
    print("END OF PROGRAM")

#module_1_p.py (line 5 changed)

class module_1:
    def __init__(self):
        place_holder = "something"

    def add_1_2(self, d):
        d.All = d.A + d.B
        print("new_string=", d.All)


#module_2_p.py (lines 5 and 6 changed)

class module_2:
    def __init__(self):
        place_holder = "something"

    def combine_it_all(self, m1, d):
        m1.add_1_2(d)
        d.All = d.All + d.C

#main.py (line 9 changed)
from data_p import data
from module_1_p import module_1
from module_2_p import module_2

d = data()
m1 = module_1()
m2 = module_2()

m2.combine_it_all(m1, d)
print("d.All = ", d.All)
print("END OF PROGRAM")