Python中_和__的区别是:
1.单下划线,只是PEP8的规范,只是约定私有,类和对象都可以访问
2. 双下划线表示私有类型,无法在外部直接访问。可以通过property装饰器查看,但是依旧无法修改
示例:
class Stu:
def __init__(self,age):
self.__age = age
@property
def age(self):
return self.__age
@age.setter
def age(self,age:int):
if age > 100 or age < 0:
print("不合法")
else:
self.__age = age
return self.__age
if __name__ == '__main__':
s = Stu(10)
# 修改前
print(s.age)
s.age = -1
# 修改后
print(s.age)
如果想要强行修改,python提供了一个@方法名.setter的装饰器, 允许你对已用@property装饰的方法赋值。
需要注意的是:setter装饰器必须在property的后面,且两个被修饰的属性(函数)名称必须保持一致。