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

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()
会掩盖这一事实。。。