python-从员工字典中打印员工对象信息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-从员工字典中打印员工对象信息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2709字,纯文字阅读大概需要4分钟。
内容图文
![python-从员工字典中打印员工对象信息](/upload/InfoBanner/zyjiaocheng/686/b89a0a94587046b4b835be926d0fc24f.jpg)
我试图不使用for循环从员工对象的字典中打印员工对象信息.到目前为止,这是我所做的:
employee_dict = {}
class Employee:
def __init__(self, id, salary):
self.id = id
self.salary = salary
self.employee_dictionary(self)
def info(self):
return "Employee ID:{} \nSalary:{}".format(self.id, self.salary)
def employee_dictionary(self):
employee_dict = {self.id: self}
emp = Employee(1, 10)
emp1 = Employee(2, 5)
employee = employee_dict[1]
print(employee.info())
有人可以指出我正确的方向吗?我觉得我已经接近了.此代码给我的错误是:
Traceback (most recent call last):
File "/home/rob/PycharmProjects/untitled4/sdfghsfdgjrtyrty.py", line 19, in <module>
employee = employee_dict[1]
KeyError: 1
解决方法:
潜在的问题是您没有正确使用字典.而不是将新员工添加到现有的全局employee_dict中,而是尝试用仅包含新员工的新全局dict替换该全局dict:
def employee_dictionary(self):
employee_dict = {self.id: self}
如果您解决了这个问题,您实际上要问的问题甚至不会出现:
def employee_dictionary(self):
employee_dict[self.id] = self
这将在dict中添加一个从self.id到self的新映射.因此,在构造了两个ID为1和2的Employee之后,您将在dict中最终得到两个条目,分别是键1和2,一切都会正常进行.
另外,您绝对应该至少考虑另外两个更改:
>将全局变量替换为class属性,并可能也将employee_dictionary方法替换为class方法,如scharette’s answer中所述.
>将方法从employee_dictionary重命名为(a)标记为私有的(按_开头的方法按照惯例是私有的,这意味着您的用户知道除非有奇怪的用例,否则他们不应该调用它),以及(b)更多反映它的作用.也许是_register或_add_to_dict?
其中的第一个也会(同样在scharette的答案中进行了详细说明)使您要解决的问题消失了. (但是您仍然仍然需要主要修复程序.)
但是无论如何,您可能还是想了解更直接的范围问题,以及当您无法解决时如何解决它.
在Python中,您在函数中分配的任何名称都是局部变量.如果该函数中的任何地方都有spam =…(或带有鸡蛋的垃圾邮件:或肯定也属于分配对象的其他种类的东西),则该函数中对垃圾邮件的所有引用都针对该本地.因此,employee_dict = {self.id:self}将创建一个名为employee_dict的局部变量,为其分配一个值,然后返回,此时所有的局部变量都会消失.它恰好与全局名称相同的事实对Python并没有任何意义(尽管对像您这样的人类读者来说,这显然很令人困惑).
您使用的任何未分配到任何地方的名称都是局部或封闭或全局或内置变量.当您执行employee_dict [self.id]时,因为在任何地方都没有employee_dict =…,Python会搜索局部范围,封闭范围,全局范围和内置范围,以查找employee_dict的含义,并查找全局范围.
您可以强制Python将名称视为全局变量(即使您已为其分配),并在函数顶部使用全局语句:
def employee_dictionary(self):
global employee_dict
employee_dict = {self.id: self}
即使名称已经是全局名称,添加全局名称也是安全的.这通常是没有意义的,但是如果您不确定某个东西是否可以算作赋值(或者不确定将来的代码读者是否可以肯定……),并且您想弄清楚该变量是全局变量,则可以声明:
def employee_dictionary(self):
global employee_dict
employee_dict[self.id] = self
内容总结
以上是互联网集市为您收集整理的python-从员工字典中打印员工对象信息全部内容,希望文章能够帮你解决python-从员工字典中打印员工对象信息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。