【发布时间】:2017-11-22 01:13:04
【问题描述】:
所以我正在努力设置一个 Python 类,该类将用作获取/设置字典部分的一种方式。我正在尝试对其进行设置,以便我有一个字典(例如 ID Numbers : Names)和一个作为字典当前选定成员的变量。
我正在尝试实现它,以便我有 getter 和 setter 来返回当前选择的字典值是什么,以及带有 try/except 块的 setter 来将当前选择更改为字典中的另一个成员。我不关心传递 ID 号,我只需要确保我可以通过 getter 检索名称。这是我的代码:
class Classroom:
def __init__(self):
self.__classList = {
001: Mark,
002: Kevin,
003: Stacy}
self.currentStudent = self.__classList[001] #start at the beginning of the list
@property
def currentStudent(self):
return self.__currentStudent
@currentStudent.setter
def currentStudent(self, ID):
try:
currentStudent = __classList[ID]
except:
print("Invalid ID entered")
当我去测试代码时,根据我对使用@property 的理解,如果我输入以下内容:
classroom = Classroom()
classroom.currentStudent = 002
print(classroom.currentStudent)
我应该有屏幕打印“Kevin”不是吗?我现在得到的是屏幕正在打印 002。我做错了什么?
【问题讨论】:
-
您没有创建
Classroom的实例。您正在使用类对象本身,它的行为非常不同。 -
另外,你的二传手无论如何都被破坏了。
-
currentStudent = __classList[ID]__classList?除非您将它放在全局命名空间中,否则它将无法工作...此外,鉴于您没有将其存储在任何地方,您不妨删除该方法。 -
为什么
__classList使用双下划线?无论如何,您需要回到 OOP 的基础知识。您将实例与类混淆了。在您的设置器中,您只是将__classList字典中的一些值分配给局部变量currentStudent,当方法返回给调用者时,该变量会被丢弃,实际上什么也不做。 -
您认为您在哪里创建了
Classroom的实例?您有一行Classroom.currentStudent = 002正在处理 class,实际上 删除您的属性 并用002替换它(顺便说一句,它不再是有效的语法在 Python 3 和 Python 2 中,无论如何都等于2,所以你应该只使用一个字符串。
标签: python dictionary encapsulation setter getter