在python中的类中动态创建变量的问题
我有一个代码,它创建了一个名为“frame”的类。调用它时,定义一组任意坐标,它将创建必要数量的self.x'n'和self.y'n'变量,其中'n'是您输入的坐标数。以下是迄今为止的代码:在python中的类中动态创建变量的问题,python,class,variables,Python,Class,Variables,我有一个代码,它创建了一个名为“frame”的类。调用它时,定义一组任意坐标,它将创建必要数量的self.x'n'和self.y'n'变量,其中'n'是您输入的坐标数。以下是迄今为止的代码: class NoCoords(Exception): "raised if no coordinates are input" class frame: def __init__(self,*coords): try:
class NoCoords(Exception): "raised if no coordinates are input"
class frame:
def __init__(self,*coords):
try:
for count,pos in enumerate(coords,1):
exec('self.x%s,self.y%s=%s'%(count,count,pos))
except(IndexError): raise NoCoords()
我遇到的问题是,如果我将frame1定义为具有2个坐标的frame类,然后将frame2定义为具有3个坐标的frame类,它将不会为frame2创建单独数量的x和y坐标。它只会创建frame1所需的x1、y1和x2、y2变量,而在创建frame2时,它只会创建x1、y1和x2、y2变量,它不会创建第三组变量(x3、y3)来包含frame2中指定的第三个坐标
因此,这带来了几个问题:
1.可以做些什么(如果有的话)来解决这个问题?
2.这是一种愚蠢的做法吗?
3.如果2的答案是“是”,那么做我想要完成的事情的更好方法是什么
def __init__(self,*coords):
self.coords = {}
for count,pos in enumerate(coords,1):
self.coords["x%s" % count] = pos
self.coords["y%s" % count] = pos
在该庄园中动态创建变量是不受欢迎的。将这些“变量”存储在dict中要好得多
而不是做
something.x1
你能行
something.coords["x1"]
正如所指出的,另一种选择是使用
for count,pos in enumerate(coords,1):
setattr(self, "x%s" % count, pos)
但对我来说,这感觉有点脏,这使得一开始就很难获得“x”变量的总数。甚至,如果OP真的想要那个API,
setattr(self,“x%s”%count,pos)
完美!谢谢你的帮助!您如何定义frame1
和frame2
?使用此代码,您实际上无法定义“具有2个坐标的框架类”;您只能定义frame
的实例,每个实例都有自己的坐标数。frame1=frame((30,20)、(50,80)),frame2=frame((70,35)、(22,60)、(90100)),我可以访问frame2.x3
和frame2.y3
。是什么让你认为他们没有被创造出来?