当我在 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 方法将是自动调用?换句话说:
在__init__
方法中,例如,当我说self.hour = hour
时,hour
方法将被自动调用,init方法的参数将是传进去了?
class 定义中的任何其他地方,如果我调用 self.hour
,hour
方法也会被调用吗?
在 hour
getter/setter 方法中,我是否必须将 _
与变量名一起使用,或者这只是要遵循的约定?
谢谢!
- 是的。 getter 和 setter 用于引用属性的任何地方,无论是在 class.
内部还是外部
- 是的,同理。
_
前缀只是一种命名约定,您可以随意调用该属性,只要它不同于 属性.
所以,我正在学习 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 方法将是自动调用?换句话说:
在
__init__
方法中,例如,当我说self.hour = hour
时,hour
方法将被自动调用,init方法的参数将是传进去了?class 定义中的任何其他地方,如果我调用
self.hour
,hour
方法也会被调用吗?在
hour
getter/setter 方法中,我是否必须将_
与变量名一起使用,或者这只是要遵循的约定?
谢谢!
- 是的。 getter 和 setter 用于引用属性的任何地方,无论是在 class. 内部还是外部
- 是的,同理。
_
前缀只是一种命名约定,您可以随意调用该属性,只要它不同于 属性.