# 私有化
# __属性 : 将属性私有化
# 私有化之后访问范围仅限于类中
'''
优点:
1.隐藏属性不被外界随意修改
2.也可以修改,通过函数set()
3.取值:函数get()
'''
# 封装:
# 1.私有化属性
# 2.定义共有set和get方法
class Stu:
def __init__(self,name,age):
# 不希望外界修改属性的时候,将其私有化
self.__name = name
self.__age = age
self.__score = 60
# 定义共有set和get方法
# set 赋值
def setAge(self,age):
if age>0 and age<20:
self.__age = age
else:
print('年龄不在正确范围内')
# get 取值
def getAge(self):
return self.__age
xingxing = Stu('刘星',15)
# print(xingxing.name) # 此时是访问不到的
xingxing.setAge(16)
print(xingxing.getAge()) # 16
print(dir(Stu))
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
# '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
# '__init__', '__init_subclass__', '__le__', '__lt__', '__module__',
# '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
# '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'getAge', 'setAge']
print(dir(xingxing))
# ['_Stu__age', '_Stu__name', '_Stu__score', '__class__', '__delattr__',
# '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
# '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__',
# '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__',
# '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
# '__subclasshook__', '__weakref__', 'getAge', 'setAge']
# 开发中看到一些私有化处理:装饰器
# property
class Stu:
def __init__(self,name,age):
self.name = name
# 不希望外界修改属性的时候,将其私有化
self.__age = age
self.__score = 60
@property
def age(self):
return self.__age
@age.setter
def age(self,age):
if age > 0 and age < 20:
self.__age = age
else:
print('年龄不在正确范围内')
s = Stu('hah',15)
print(s.name) # hah
# 修改age值,可以像非私有属性一样操作
s.age = 18
# 可以直接调用,可以像非私有属性一样操作
print(s.age) # 18