当我在 Python 代码中创建 getter 和 setter 时会发生什么?

What Happens When I Create Getters and Setters in Python Code?

所以,我正在学习 Python,目前正在学习 OOP 概念。这是一个示例程序:

class Time:
    def __init__(self, hour=0, minute=0, second=0):
        self.hour = hour
        self.minute = minute
        self.second = second

    @property
    def hour(self):
        """Return the hour"""
        return self._hour

    @hour.setter
    def hour(self, hour):
        """Set the hour"""
        if not (0 <= hour < 24):
            raise ValueError("Hour must be between 0 and 23")

        self._hour = hour

    @property
    def minute(self):
        """Return the hour"""
        return self._minute

    @minute.setter
    def minute(self, minute):
        """Set the minute"""
        if not(0 <= minute < 60):
            raise ValueError("Minute must be between 0 and 59")

        self._minute = minute

    @property
    def second(self):
        """Return the seconds"""
        return self._second

    @second.setter
    def second(self, second):
        """Set the second"""
        if not (0 <= second < 60):
            raise ValueError("Second must be between 0 and 59")

        self._second = second


wake_up = Time(6, 45)

所以,我假设当创建任何 Time 对象(在本例中为 wake_up)时,getter 和 setter 方法将是自动调用?换句话说:

  1. __init__方法中,例如,当我说self.hour = hour时,hour方法将被自动调用,init方法的参数将是传进去了?

  2. class 定义中的任何其他地方,如果我调用 self.hourhour 方法也会被调用吗?

  3. hour getter/setter 方法中,我是否必须将 _ 与变量名一起使用,或者这只是要遵循的约定?

谢谢!

  1. 是的。 getter 和 setter 用于引用属性的任何地方,无论是在 class.
  2. 内部还是外部
  3. 是的,同理。
  4. _ 前缀只是一种命名约定,您可以随意调用该属性,只要它不同于 属性.