Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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 - Fatal编程技术网

在python中的类中动态创建变量的问题

在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:

我有一个代码,它创建了一个名为“frame”的类。调用它时,定义一组任意坐标,它将创建必要数量的self.x'n'和self.y'n'变量,其中'n'是您输入的坐标数。以下是迄今为止的代码:

    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
。是什么让你认为他们没有被创造出来?