2017-02-12 92 views
0

我想使用在类B中的类A中定义的变量。基本上我需要类A中的用户条目是我保存的数据的文件名在B类下面是我的代码:在类A中使用变量在Python中的类B

class A(object): 

    def __init__(self, master): 
     self.master = master 
     self.labelSub=Label(self.master, text="Participant No.") #where users their name 
     self.entrySub=Entry(self.master,bg="grey") 
     A.csv_name_sub = str(self.entrySub.get()) #save users entry 

class B(A): 

    def __init__(self, master): 
     self.master = master 
     A.csv_name_sub = str(self.entrySub.get()) 
     self.resultFile = open("/Users/Desktop/" + A.csv_name_sub + 
          '_results.csv', 'w') #use the users entry as the name of the csv file I save 

但错误告诉我:“AttributeError错误:‘B’对象有没有属性‘entrySub’”。你能帮我解决吗?谢谢!!

+0

通过在变量的类的开头添加'Global'使其成为一个全局变量。像'全球A' –

回答

0

继承类A的构造函数没有自动调用:https://docs.python.org/3.5/reference/datamodel.html?highlight=baseclass#object.init

callling基类的构造后,你的B的情况下应具备的属性:

class B(A): 

    def __init__(self, master): 
     A.__init__(self, master) 
     ... 

https://docs.python.org/3.5/tutorial/classes.html#class-and-instance-variables解释之间的区别类变量和实例变量。

编辑:Eric编辑得更快。 ;)

+0

嗨迈克尔,谢谢你的回复。我试过你的代码,没有错误提示(程序运行),但文件名不会保存在'csv_name_sub + _results.csv'中。这里是我的代码'class B(A):def __init __(self,master):''A .__ init __(self,master)','A.csv_name_sub = str(self.entrySub.get())'''self。 resultFile = open(“/ Users/Desktop /”+ A.csv_name_sub +'_results.csv','w')'。它没有说csv_name_sub不存在,但只是没有显示在文件名中。你知道为什么吗? Thx再次! – key

2

Inside B.__init__A.__init__尚未被调用,所以self.entrySub尚未定义。

thread (Understanding Python super with init methods)可能会帮助你。

您可以用super的电话替换B.__init__的前两行。

注意:你确定要混合类和实例变量吗?所有A对象只有一个A.csv_name_sub,但它似乎取决于master,对于每个A对象可能都不相同。

+0

嗨,Eric,谢谢!在A类和B类上还有其他对象,因为我想保持我的代码简洁,所以我没有显示它们。他们都是同一个主人。 – key

+0

我在你建议的页面中使用了'class ChildA'' Base .__ init __(self)''(以下也是Michael建议的)。但它没有正常工作。 AttributeError没有出现,并且程序运行,但文件名不会根据条目而改变。这里是我的代码'class B(A):def __init __(self,master):''A .__ init __(self,master)','A.csv_name_sub = str(self.entrySub.get())'''self。 resultFile = open(“/ Users/Desktop /”+ A.csv_name_sub +'_results.csv','w')'。我得到的文件名只是“_results.csv”。你知道为什么吗? – key

相关问题