Python初学者:使用循环创建具有动态属性的动态类对象
我试图创建一些通过类动态定义的简单对象,以允许我快速迭代创建这些对象的所有可能性Python初学者:使用循环创建具有动态属性的动态类对象,python,Python,我试图创建一些通过类动态定义的简单对象,以允许我快速迭代创建这些对象的所有可能性 class NSObjects: def __init__(self, shape, position, shading): self.shape = shape self.position = position self.shading = shading def __str__(self): return '{} - {} - {
class NSObjects:
def __init__(self, shape, position, shading):
self.shape = shape
self.position = position
self.shading = shading
def __str__(self):
return '{} - {} - {}'.format(self.shape(), self.position(), self.shading())
def NSGenerator_1():
for i in range (0,3):
obj_1_i = NSObjects(shape_init_top + i, posn_init_top+i, shading_init_top+i)
for i in range (3,6):
obj_1_i = NSObjects(shape_init_mid + i, posn_init_mid+i, shading_init_mid+i)
for i in range (6,9):
obj_1_i = NSObjects(shape_init_mid + i, posn_init_mid+i, shading_init_mid+i)
NSGenerator_1()
print(obj_1_2)
现在它告诉我obj_1_2不存在。为此,您可以假设我已经在代码的其他地方定义了从0、1或2开始的所有init变量。我基本上是在尝试创建一系列对象,这些对象将具有由数学公式定义的属性
提前感谢您提供的任何帮助(我几周前才开始编写代码,所以这可能是一个非常愚蠢的问题!)您只分配给了
obj_1_I
,而不是obj_1_2
,并且它是函数的本地属性。Python无法判断\u i
是作为一个单独的变量,而不是较长的变量名的一部分。要快速修复,请尝试更换
obj_1_i=
parts withglobals()[f'obj_1_{i}]=
但是像这样将数字索引滚动到变量名(
\u1\u2
)是一种代码味道。更好的设计是将它们实际用作数据结构的索引,如列表或dict
例如,定义
obj={}
在顶层(任何类或函数之外)
然后你可以用
obj[1,2]
等替换obj[1,2]
任何地方的obj[1,i]
等。如果你这样写的话,obj[1,i]
在那些for循环中会像你期望的那样工作。你只分配过obj\u 1\u i
,而不是obj\u 1\u 2
,并且它是函数的本地属性。Python无法判断\u i
是作为一个单独的变量,而不是较长的变量名的一部分。要快速修复,请尝试更换
obj_1_i=
parts withglobals()[f'obj_1_{i}]=
但是像这样将数字索引滚动到变量名(
\u1\u2
)是一种代码味道。更好的设计是将它们实际用作数据结构的索引,如列表或dict
例如,定义
obj={}
在顶层(任何类或函数之外)
然后你可以用
obj[1,2]
等替换obj\u 1\u 2
无处不在。如果你这样写的话,obj[1,i]
在那些for循环中会像你期望的那样工作。谢谢!这很有道理-我需要所有我能得到的风格技巧!谢谢这很有道理-我需要所有我能得到的风格技巧!