【问题标题】:Getters/Setters for Python ClassPython 类的 Getter/Setter
【发布时间】: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


【解决方案1】:

我对其进行了一些修改以使其正常工作。我想你正在使用 python2.7

class ClassRoom(object):

    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:
            self.__currentStudent = self.__classList[ID]
        except:
            print("Invalid ID entered")

class_room_1 = ClassRoom()
class_room_1.currentStudent = 002

测试

print class_room_1.currentStudent
Kevin

【讨论】:

  • class_room_1.currentStudent == class_room_1.currentStudent 设为False 似乎令人困惑。
猜你喜欢
  • 2016-02-24
  • 2018-05-11
  • 2012-03-12
  • 1970-01-01
  • 2015-01-20
  • 2013-07-08
  • 1970-01-01
  • 2020-05-29
  • 2023-03-04
相关资源
最近更新 更多