Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将变量从一个类传递到另一个类?_Python_Class_Variables_Inheritance_Composition - Fatal编程技术网

Python 如何将变量从一个类传递到另一个类?

Python 如何将变量从一个类传递到另一个类?,python,class,variables,inheritance,composition,Python,Class,Variables,Inheritance,Composition,我更新了这个问题。我正在创建两个窗口,并试图将在类A中创建的变量传递给类B。请您指出我的代码中的问题是什么?以下是我的方法: class Welcome: def __init__(self, master, csv_name_sub, csv_name_ses): self.entrySes = Entry(self.master, bg="LemonChiffon3") self.entrySub=Entry(self.ma

我更新了这个问题。我正在创建两个窗口,并试图将在类A中创建的变量传递给类B。请您指出我的代码中的问题是什么?以下是我的方法:

class Welcome:

       def __init__(self, master, csv_name_sub, csv_name_ses):
            self.entrySes = Entry(self.master, bg="LemonChiffon3")  
            self.entrySub=Entry(self.master,bg="LemonChiffon3")
            self.csv_name_sub = str(self.entrySub.get())
            self.csv_name_ses = str(self.entrySes.get())
            #here users enter some info, they are saved to be used as file name the in following class

class App(Welcome):
       def __init__(self, master):
            Welcome.__init__(self, master, csv_name_ses, csv_name_sub)  #I'm trying use this line to pass the variables from the first class 
            print('session is', self.csv_name_ses)
            print("subject is", self.csv_name_sub)
            self.resultFile = open(
            "C:\\Users\\xxx" + self.csv_name_sub + '_' + self.csv_name_ses +
        '_results.csv', 'w')
       #.....
       #other codes

def main():

    root = Tk()
    myApp = Welcome(root, csv_name_ses, csv_name_sub)
    root.mainloop()

if __name__ == '__main__':
    main()
程序可以运行,但变量
csv\u name\u ses
csv\u name\u sub
不会传递到
class App
,因为它们不会在类中打印出来

我也试过下面的构图方法,还是解决不了问题:

class Welcome:
    def __init__(self, master, csv_name_sub, csv_name_ses):
            self.entrySes = Entry(self.master, bg="LemonChiffon3")  
            self.entrySub=Entry(self.master,bg="LemonChiffon3")
            self.csv_name_sub = str(self.entrySub.get())
            self.csv_name_ses = str(self.entrySes.get())

class App:
    def __init__(self, master, csv_name_ses, csv_name_sub):
           self.csv_name_sub = csv_name_sub
           self.csv_name_ses = csv_name_ses
           self.welcomePage = Welcome(master, csv_name_ses, csv_name_sub)
           print('session is', self.welcomePage.csv_name_ses)
           print("subject is", self.welcomePage.csv_name_sub)
    self.resultFile = open(
        "C:\\Users\\xxx + self.welcomePage.csv_name_sub + '_' + self.welcomePage.csv_name_ses +
        '_resultsofPart.csv', 'w')

问题是Welcome类需要实例化3个参数,而您只给出了一个“root”参数。

因为Welcome类的构造函数是
\uuuu init\uuuuuu(self、master、csv\u name\u sub、csv\u name\u ses)
,您需要为
csv\u name\u sub
csv\u name\u ses
提供一个值,并实例化该类。由于您实际上没有使用传递的
csv\u name\u sub
csv\u name\u ses
(请参见
欢迎
类的
初始化
函数中的前4行),因此这可能是一个有效的解决方案:

class Welcome:

   def __init__(self, master):
        self.entrySes = Entry(self.master, bg="LemonChiffon3")  
        self.entrySub=Entry(self.master,bg="LemonChiffon3")
        self.csv_name_sub = str(self.entrySub.get())
        self.csv_name_ses = str(self.entrySes.get())
        #here users enter some info, they are saved to be used as file name the in following class

class App(Welcome):
   def __init__(self, master):
        Welcome.__init__(self, master) 
        print('session is', self.csv_name_ses)
        print("subject is", self.csv_name_sub)
        self.resultFile = open(
        "C:\\Users\\xxx" + self.csv_name_sub + '_' + self.csv_name_ses +
    '_results.csv', 'w')
   #.....
   #other codes

使用默认参数和
初始化
self
字段:

class Welcome:

    def __init__(self, master, csv_name_sub=None, csv_name_ses=None):
        self.entrySes = Entry(self.master, bg="LemonChiffon3")  
        self.entrySub=Entry(self.master,bg="LemonChiffon3")
        self.csv_name_sub = csv_name_sub or str(self.entrySub.get())
        self.csv_name_ses = csv_name_ses or str(self.entrySes.get())

在使用
超级类
时,要从父类继承var和值,子类需要引用父类,以便
Welcome.csv\u name\u使用

class Welcome:

   def __init__(self, master, csv_name_sub, csv_name_ses):
        self.entrySes = Entry(self.master, bg="LemonChiffon3")  
        self.entrySub=Entry(self.master,bg="LemonChiffon3")
        writeToFile()

   def writeToFile(self):
        Welcome.csv_name_sub = str(self.entrySub.get())
        Welcome.csv_name_ses = str(self.entrySes.get())


class App(Welcome):
   def __init__(self, master, csv_name_ses, csv_name_sub):
        Welcome.__init__(self, master, csv_name_ses, csv_name_sub)
        self.csv_name_sub = Welcome.csv_name_sub
        self.csv_name_ses = Welcome.csv_name_ses  #parent.var

def main():

   root = Tk()
   myApp = Welcome(root, csv_name_ses, csv_name_sub)
   root.mainloop()

谢谢,我添加了另外两个变量,程序现在可以运行了。但是
csv\u name\u sub
csv\u name\u ses
仍然没有传递到第二个类,因为无法在第二个类中打印值。你知道传递变量问题的错误是什么吗?谢谢接受它们作为参数(有几个方法)并调用基类。您还需要创建一个“App”实例,它是“Welcome”的子类——在子类场景中只创建了一个实例,而“passed to class”一词令人费解。或者Welcome作为App的一个子类更合适?或者,也许用作文会更简单、更容易理解?谢谢你的评论和建议。我尝试使用Composition,但仍然不能使用子类中的变量。我已经更新了这个问题,你能帮我看看吗?谢谢你的回答。但它不会传递
类应用程序中的变量。我真的不明白你所说的传递值是什么意思,因为我只在文档命名时使用它们。这与其他类型的使用不同吗?谢谢你的建议。我曾尝试使用
csv\u name\u sub=None
csv\u name\u ses=None
,但变量仍然无法从
类欢迎
传递到
类应用
。你有更详细的解释为什么我要在这里添加
None
?谢谢