Discuss / Python / 结合上一节`__slot__`,可以发现如下问题

结合上一节`__slot__`,可以发现如下问题

Topic source

Zflyee

#1 Created at ... [Delete] [Delete and Lock User]
>>> s = Student()
>>> s.set_score(98)
Traceback (most recent call last):
  File "<pyshell#114>", line 1, in <module>
    s.set_score(98)
  File "E:/Python/Projects/Exercise_v2.0/Exercise_slots.py", line 12, in set_score
    self._score = value
AttributeError: 'Student' object has no attribute '_score'
# 对象中没有_score属性

查看源代码

class Student(object):
    __slots__ = ('name', 'age', 'tel', 'sex', 'ID')

    def get_score(self):
        return self._score

    def set_score(self, value):
        if not isinstance(value, int):
            raise ValueError('Score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('Score must between 0 ~ 100!')
        self._score = value

发现__slot__能够限制方法里面的属性。 解决方案

  # 这里加上 _score
      __slots__ = ('name', 'age', 'tel', 'sex', 'ID', '_score')

  • 1

Reply