Python:如何创建无限多的以不断变化的变量命名的实例?
我想知道如何从一个不断变化的变量中创建尽可能多的实例,例如,每次有人输入他们的信息时,将他们的信息放在其名称的新实例下。您可以这样做:Python:如何创建无限多的以不断变化的变量命名的实例?,python,Python,我想知道如何从一个不断变化的变量中创建尽可能多的实例,例如,每次有人输入他们的信息时,将他们的信息放在其名称的新实例下。您可以这样做: class pupil(object): name = 'name' mark = 0 classOfPupil = 0 variable = bob variable = pupil() print(bob.name) variable = steve variable = pupil() print(steve.name
class pupil(object):
name = 'name'
mark = 0
classOfPupil = 0
variable = bob
variable = pupil()
print(bob.name)
variable = steve
variable = pupil()
print(steve.name)
globals()['bob'] = pupil()
或者使用如下变量:
class pupil(object):
name = 'name'
mark = 0
classOfPupil = 0
variable = bob
variable = pupil()
print(bob.name)
variable = steve
variable = pupil()
print(steve.name)
globals()['bob'] = pupil()
虽然我不确定我是否会在实践中推荐它,但有更好的方法可以做到这一点
编辑:例如,使用自己的词典:
pupil_names = ['bob', 'bill', 'ted']
for pupil_name in pupil_names:
globals()[pupil_name] = pupil()
globals()[pupil_name].name = pupil_name
print bob.name # 'bob'
更安全、更简单。您能用变量而不是字符串来替换“['bob']”吗?是的,请参阅编辑的答案@Flux。在实践中绝对不建议这样做。。。您可能会有重击姓名的风险(如果有人这样做会怎样呢?
bob=3
——他们现在可能已经超过了瞳孔()
对象,或者瞳孔()
对象可能超过了用户的bob
)。更糟糕的是,因为它是globals()
你最终可能会影响本地范围之外的名称,这将导致令人不快的惊喜,成为调试的噩梦-例如:如果我的模块中有一个名为bill
的函数,那么后来它突然不再是一个函数,而是一个瞳孔
对象。。。哎哟:(@JonClements哦,我想Python总是有攻击名字的风险,例如,bob=Thing();bob=3
因此需要始终谨慎。但大家都同意,这不是一段在现实世界中使用的好代码!当然,您可以始终删除名称-但这在同一作用域中更常见-调用者作用域通常不希望被调用者修改其状态。bill=3
函数内部将进行本地绑定,您必须使用global bill
这至少表明您打算做某事(调试工具将能够跟踪它)…修改globals()
会掩盖这一事实。。。