class 实例方法中的变量 update/inherit
class variable update/inherit in instance method
我正在尝试更新 classA 中的变量并使用 classB 中的更新信息。因此我有两个问题:1)如何在实例方法中更新 class 变量? 2) 如何使用从父级继承的变量 class?
这个程序的主要思想是用户输入名称,名称var,它的值csv_name_sub
将被保存和更新并用于class B.(即用作文件姓名)
classA(object):
def __init__(self, master, csv_name_sub):
self.entrySub = Entry(self.master,bg="grey") #user enters sth
button1 = Button(self.master,text='NEXT', command=self.gotoPage1)
def writeToFile(self):
self.csv_name_sub = str(self.entrySub.get()) #save value to var
def gotoPage1(self):
self.writeToFile()
root2=Toplevel(self.master)
self.instPage1=classB(root2)
classB(classA):
def __init__(self, master, csv_name_sub):
classA.__init__(self, master, csv_name_sub)
print(self.csv_name_sub)
self.resultFile = open(
"/Users/" + self.csv_name_sub,'w')
self.resultFileWrite = csv.writer(self.resultFile)
def main():
root = Tk()
myApp = classA(root, csv_name_sub)
root.mainloop()
但是错误是:
myApp = classA(root, csv_name_sub)
NameError: name 'csv_name_sub' is not defined
我了解到 csv_name_sub
是在父 class 中创建的,它的值在子 class 中没有继承。但是如何访问子 class 中的变量值?因为 csv_name_sub
的值是由用户在父 class 中输入的内容决定的,所以我不能自己在子 class 中定义它。
感谢您的帮助!
在你的代码中初始化classA in __init__
of class B, The csv_name_sub
of classA 未设置,因为它不在 classA
的 __init__
代码内
我有这段代码并且有效:
class classA():
def __init__(self, csv = ""):
print "Inside classA init"
def set_csv(self, csv):
print "Setting csv to %s" %csv
self.csv = csv
class classB(classA):
def __init__(self,csv):
print("Inside classB init")
classA.__init__(self, csv)
classA.set_csv(self, csv)
print "class B csv after set_csv %s" %self.csv
my_class = classB("abc")
输出:
Inside classB init
Inside classA init
Setting csv to abc
class B csv after set_csv abc
这会起作用,除非你想创建 2 个 different classA 和 class B 对象然后复制值,在这个如果您必须修改 classB.__init__
以便它将 classA obj 作为参数并初始化自身。 (在你的情况下,一定要在从 classA 对象创建 classB 对象之前调用 set_csv)或者将 csv 作为 classA 的静态变量,然后写修改该变量的方法。 class/ 继承的 classes 可以访问此变量,并且在一个 class 中进行修改会复制到所有 classes。请注意,此变量不会绑定到 class 对象,尽管您可以从任何子 class 访问该变量,但尝试从子 class 修改变量将 return 在与该 class 关联的新静态变量中,父 class 变量未更改。
例如:
class classA():
csv = ""
def __init__(self, csv = ""):
print "Inside classA init"
classA.csv = csv
class classB(classA):
def __init__(self,csv):
print "Inside classB init"
classA.__init__(self, csv)
my_classA = classA("abc")
print classA.csv
my_classB = classB("efg")
print classA.csv
print classB.csv #same as classA's csv
classB.csv = "lmn" #inherited static csv is masked.
print classA.csv
print classB.csv # no longer points to the classA's csv
输出:
Inside classA init
abc #initialized
Inside classB init
Inside classA init
efg #changed in Init of classB by calling init of classA
efg #classB.csv
efg #classA.csv after (classB.csv = "lmn")
lmn #classB.csv created a new static variable csv, masking the variable of classA
我希望这有助于解决您的问题。
我正在尝试更新 classA 中的变量并使用 classB 中的更新信息。因此我有两个问题:1)如何在实例方法中更新 class 变量? 2) 如何使用从父级继承的变量 class?
这个程序的主要思想是用户输入名称,名称var,它的值csv_name_sub
将被保存和更新并用于class B.(即用作文件姓名)
classA(object):
def __init__(self, master, csv_name_sub):
self.entrySub = Entry(self.master,bg="grey") #user enters sth
button1 = Button(self.master,text='NEXT', command=self.gotoPage1)
def writeToFile(self):
self.csv_name_sub = str(self.entrySub.get()) #save value to var
def gotoPage1(self):
self.writeToFile()
root2=Toplevel(self.master)
self.instPage1=classB(root2)
classB(classA):
def __init__(self, master, csv_name_sub):
classA.__init__(self, master, csv_name_sub)
print(self.csv_name_sub)
self.resultFile = open(
"/Users/" + self.csv_name_sub,'w')
self.resultFileWrite = csv.writer(self.resultFile)
def main():
root = Tk()
myApp = classA(root, csv_name_sub)
root.mainloop()
但是错误是:
myApp = classA(root, csv_name_sub)
NameError: name 'csv_name_sub' is not defined
我了解到 csv_name_sub
是在父 class 中创建的,它的值在子 class 中没有继承。但是如何访问子 class 中的变量值?因为 csv_name_sub
的值是由用户在父 class 中输入的内容决定的,所以我不能自己在子 class 中定义它。
感谢您的帮助!
在你的代码中初始化classA in __init__
of class B, The csv_name_sub
of classA 未设置,因为它不在 classA
__init__
代码内
我有这段代码并且有效:
class classA():
def __init__(self, csv = ""):
print "Inside classA init"
def set_csv(self, csv):
print "Setting csv to %s" %csv
self.csv = csv
class classB(classA):
def __init__(self,csv):
print("Inside classB init")
classA.__init__(self, csv)
classA.set_csv(self, csv)
print "class B csv after set_csv %s" %self.csv
my_class = classB("abc")
输出:
Inside classB init
Inside classA init
Setting csv to abc
class B csv after set_csv abc
这会起作用,除非你想创建 2 个 different classA 和 class B 对象然后复制值,在这个如果您必须修改 classB.__init__
以便它将 classA obj 作为参数并初始化自身。 (在你的情况下,一定要在从 classA 对象创建 classB 对象之前调用 set_csv)或者将 csv 作为 classA 的静态变量,然后写修改该变量的方法。 class/ 继承的 classes 可以访问此变量,并且在一个 class 中进行修改会复制到所有 classes。请注意,此变量不会绑定到 class 对象,尽管您可以从任何子 class 访问该变量,但尝试从子 class 修改变量将 return 在与该 class 关联的新静态变量中,父 class 变量未更改。
例如:
class classA():
csv = ""
def __init__(self, csv = ""):
print "Inside classA init"
classA.csv = csv
class classB(classA):
def __init__(self,csv):
print "Inside classB init"
classA.__init__(self, csv)
my_classA = classA("abc")
print classA.csv
my_classB = classB("efg")
print classA.csv
print classB.csv #same as classA's csv
classB.csv = "lmn" #inherited static csv is masked.
print classA.csv
print classB.csv # no longer points to the classA's csv
输出:
Inside classA init
abc #initialized
Inside classB init
Inside classA init
efg #changed in Init of classB by calling init of classA
efg #classB.csv
efg #classA.csv after (classB.csv = "lmn")
lmn #classB.csv created a new static variable csv, masking the variable of classA
我希望这有助于解决您的问题。