我想获取变量的名称,这些变量用于创建某个类的(大量)实例。
因此,我使用dir()
获取本地范围内的名称列表。之后,我检查其中一个名称是否是变量的名称,它指向类Employee
的实例。
我意识到这一事实,如果本地范围内有大量名称,这可能会非常慢。 但速度对我来说不是问题。
所以我的问题是:这会被视为不良做法'? - 我只是好奇,因为我有一种奇怪的感觉,以某种方式不好 / 错误这样做......
class Employee:
def __init__(self, name, age):
self.name = name
self.age = age
H1001 = Employee('Tom', 32)
H1002 = Employee('Paula', 28)
for name in dir():
if eval('isinstance({}, Employee)'.format(name)):
print("Instance of the class 'Employee' - variable '{}':".format(name))
print(" The name is {}!".format(eval('{}.name'.format(name))))
print(" {} years old!".format(eval('{}.age'.format(name))))
输出:
Instance of the class 'Employee' - variable 'H1001':
The name is Tom!
32 years old!
Instance of the class 'Employee' - variable 'H1002':
The name is Paula!
28 years old!
编辑:我不认为这是这个问题的重复:How do I create a variable number of variables? - 我没有找到在Python中创建变量变量的方法。
这样想:其他人创建了这个类和大量的实例。想象一下,这部分代码无法改变。 - 现在我的任务是找出这些实例中有多少已创建,以及如何获取变量的名称(' H1001',' H1002' ... ' H2034'),已在此过程中使用过。
我能想到的一个可能的解决方案是循环遍历本地范围内的所有名称并询问该列表中的每个名称:"您是变量的名称,它是指变量的实例班级'员工'?" - 正如你在输出中看到的那样,我得到了我正在寻找的结果。但它觉得“错误”#39;这样做。所以我只想要一些反馈,如果这可能是一个有效的解决方案。
答案 0 :(得分:0)
是。元编程功能强大但难以调试,易碎且通常难以阅读。您不应该在变量名称中编码关键信息,因为有更好的数据结构可用。如果有疑问,最简单的方法可能是最好的方法:
class Employee:
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
employees = [
Employee('H1001', 'Tom', 32),
Employee('H1002', 'Paula', 28)
]
for employee in employees:
print(" The name is {}!".format(employee.name))
print(" {} years old!".format(employee.age))