【发布时间】:2022-11-05 11:22:45
【问题描述】:
我正在学习 getter 和 setter ,我的理解是它们的使用是为了没有人可以直接更改对象的属性。在示例中
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def get_age(self):
return self._age
def set_age(self, new_age):
if isinstance(new_age, int) & new_age>0 & new_age<120:
self._age = new_age
def get_name(self):
return self._name
def __str__(self):
return 'Person[' + self._name + '] is ' + str(self._age)
p1 = Person("Sandeep", 49)
我创建了一个对象p1,将年龄设置为49。因为我已经创建了set_age 函数,所以我希望我们只能通过set_age 更改p1 的年龄,而不是通过常规方式。但这并没有发生,我也可以通过 p1._age = 35 来更改 p1 的年龄。那么,如果我仍然能够直接访问属性,那么制作 set_age 函数有什么好处?
我想,我错过了一些东西,请帮忙。
【问题讨论】:
-
以下划线(_)开头的变量被认为是私有变量,理想情况下不应修改。
-
如果使用双下划线
self.__age,实际上可以防止从外部直接访问该属性,但是一旦开始使用继承就不建议这样做。 -
@LeopardShark 我想,不。
标签: python getter-setter