python的新手,一直在谷歌上搜索。我正在尝试使用简单的计算器进行python类。
目前正在使用tkinter。
self.grid()
self.customfont = font.Font(family="Arial", size=14)
self.entryVariable=tkinter.StringVar()
dictFields = {"S0":"Enter initial price, S0, here.",
"K":"Enter strike price, K, here.",
"T":"Enter time to maturity, T, here.",
"r":"Enter risk-free rate, r, here.",
"sigma":"Enter volatility, sigma, here.",
"q":"Enter dividend yield, q, here."
}
i = 2
for key in dictFields.keys():
self.entryVariable = tkinter.StringVar()
## Unsure of this but I googled that I can create dynamically named class variables on the fly in this manner - would like to check if this is correct and if it is the best way to do it?
setattr(self, key, 0)
## another difficulty is that subsequently i have to set the properties of this variables - self.key seems to return be the literal self.key rather than self.S0, self.K etc.
self.key = tkinter.Entry(self, textvariable=self.entryVariable, justify="center")
self.key.grid(row=i, column=1, sticky="EW")
self.key.bind("<Return>", self.OnPressEnter)
self.entryVariable.set(dictFields[key])
i+=2
任何帮助将不胜感激!
编辑: 我不确定是因为我的问题不清楚(因为它们嵌入在代码中的注释中),或者问题本身通常是不好的。如果有人可以提出建议,我将不胜感激。
问题:
如何动态创建类变量?我搜索了一些涉及setattr(self, key, 0)
或"{0}".format(key)
的方法。但是,我似乎无法让它们工作,因为我试图将tkinter.Entry对象分配给这个动态创建的类变量名。
再次感谢。
答案 0 :(得分:0)
self
很棒,如果你的某些东西可以自称为self
。
为此,您需要一个课程,这样您就可以将这些变量放在一个地方,并理解您正在构建的这个东西。
怎么样:
class calculator(<you_might_need_another_class_here>):
""" just a normal calculator """
然后你的下一行将定义你想要如何启动计算器
def __init__(self): #here is where self shows up
pass
#replace "pass" with anything calculators do automatically
在此之后,您使用self
将在此课程中使用。
是的,您可以使用setattr动态创建属性。确保所有密钥都是字符串。
但最后一个问题是否。你正在访问“self.key”而不是self.S0 所以像
这样的一行self.key = tkinter.Entry(self, textvariable=self.entryVariable, justify="center")
可以成为
setattr(self,key,tkinter.Entry(self, textvariable=self.entryVariable, justify="center")
但老实说,我不知道如何处理这条线。
self.key.grid(row=i, column=1, sticky="EW")
您可以使用getattr(self,key)来拉动动态创建的self.keys