现在,我正在学习Python,并与OOP的一些概念作斗争,其中之一是(对我来说)动态初始化类实例并将它们分配给动态生成的变量名有多困难,以及为什么我在阅读时认为我不应该这样做。你知道吗
在大多数具有类似方向的线程中,答案似乎是这样做是不符合Pythonic的。你知道吗
例如generating variable names on fly in python
有人能详细说明一下吗?你知道吗
以典型的面向对象学习案例为例:
LOE = ["graham", "eric", "terry_G", "terry_J", "john", "carol"]
class Employee():
def __init__(self, name, job="comedian"):
self.name = name
self.job = job
为什么这样做更好:
employees = []
for name in LOE:
emp = Employee(name)
employees.append(emp)
然后呢
for emp in employees:
if emp.name == "eric":
print(emp.job)
而不是这个
for name in LOE:
globals()[name] = Employee(name)
以及
print(eric.job)
谢谢!你知道吗
如果动态生成变量名,则不知道存在什么名称,也不能在代码中使用它们。你知道吗
好吧,现在怎么办?你不能安全地这样做:
因为你不知道
eric
是否存在。不管怎样,您都必须使用字典/列表来测试eric
是否存在:因此,只需将对象存储在字典或列表中即可:
通过这种方式,您还可以安全地迭代一个数据结构以访问所有分组对象,而无需将它们与其他全局变量排序。你知道吗
globals()
给你一个dict
你可以把名字放进去。但是你同样可以自己做dict
,把名字放在那里。你知道吗因此,可以归结为“名称空间”的概念,即将相似的事物隔离到不同的数据结构中的概念。你知道吗
您应该这样做:
现在,如果您的程序中有另一部分描述了演练的各个部分,您可以这样做:
你就不会和那个叫查克的人有名字冲突了。如果一切都是全球性的,你就会有问题。查克甚至可能失业。你知道吗
相关问题 更多 >
编程相关推荐