首页 / PYTHON / Python-无法访问类的实例
Python-无法访问类的实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python-无法访问类的实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2027字,纯文字阅读大概需要3分钟。
内容图文
![Python-无法访问类的实例](/upload/InfoBanner/zyjiaocheng/669/3a9b1489140744008bbbf6e1d2aa2e61.jpg)
我陷入一个可能很简单的问题,但我无法弄清楚.我正在尝试开发用于创建时间表的桌面应用程序.我正在使用Tkinter和Python 3.6.我有一个Teacher类,因此用户可以创建具有各种属性的新实例.
class Teacher:
"""The properties of the teachers"""
allTeachers = []
def __init__(self, name, lessons, timeframe):
self.name = name
Teacher.allTeachers.append(self.name)
self.lessons = lessons # number of lessons
self.timeframe = timeframe
创建新实例后,我检查它是否存在:
for obj in gc.get_objects():
if isinstance(obj, Teacher):
print(obj.name)
但是,当用户添加另一位教师时,上面的代码表明Teacher类仍然只有一个实例(最新的一个).而且,当我从另一个模块(在同一目录中)运行相同的代码时,Python告诉我Teacher类没有实例.尽管如此,class变量(allTeachers)仍会跟踪所有已添加的教师.
我是否缺少有关访问对象的基本知识?
解决方法:
如果您不保留对实例的任何引用,Python将释放内存.您仅存储教师的姓名,而不是其实例.因此,如果碰巧只是这样创建它们:
Teacher("Hugo", None, "8am to 2pm")
Teacher("Claas", "some", "9am to 10am")
没有引用实际实例,它们会被垃圾收集.
其他信息可以在这里阅读:Python garbage collector documentation
如果您想查找事物,则列表如果包含4个以上的条目则不好,它们的查找数为O(n).请使用O(1)的集合或字典.如果要按名称查找教师,则使用dict会很方便:
class Teacher:
"""The properties of the teachers"""
allTeachers = {} # dict as lookup is faster then list for 4+ teachers
def __init__(self, name, lessons, timeframe):
self.name = name
Teacher.allTeachers[self.name] = self # store the instance under its name
self.lessons = lessons # number of lessons
self.timeframe = timeframe
@classmethod
def hasTeacher(cls,name):
return name in Teacher.allTeachers
Teacher("Hugo", None, "8am to 2pm")
Teacher("Claas", "some", "9am to 10am")
import gc
print(Teacher.hasTeacher("Judith"))
print(Teacher.hasTeacher("Claas"))
for obj in gc.get_objects():
if isinstance(obj, Teacher):
print(obj.name)
输出:
False # no teacher called Judith
True # a teacher called Claas
# all the Teacher instances
Hugo
Claas
如果您以这种方式存储教师实例,则可能还应该提供一种从名称中将其从类变量实例中删除的方法-并可能从名称实例中返回教师实例.
内容总结
以上是互联网集市为您收集整理的Python-无法访问类的实例全部内容,希望文章能够帮你解决Python-无法访问类的实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。