# 私有化
# 封装 1,私有化属性 2定义公有的set和get方法
# __属性:就是将属性私有化,访问范围仅仅限于类中
'''
好处:
1,隐藏属性,不被外界随意修改
2,也可以修改,通过函数
def setxx(self,xx):
if 筛选赋值的内容:
self.__xx = xx
else:
不赋值
3,如果想获取具体的某一属性
使用get函数
def getxx(self):
return self.__xx
'''
class Student:
def __init__(self, name, age):
self.__name = name
self.__age = age
self.__socre = 49
# 定义公有set和get 方法
# set 是为了赋值
def setAge(self, age):
if 0 < age < 100:
self.__age = age
else:
print('年龄输入错误')
# get是为了取值(查询)
def getAge(self):
return self.__age
def setName(self, name):
if len(name) > 3:
self.__name = name
else:
print('名字长度不够')
def getName(self):
return self.__name
def __str__(self):
return f'姓名是:{self.__name},年龄是:{self.__age},考试分数是:{self.__socre}'
# attribute: setName getName __str__ __init__
xiaoxin = Student('xiaoxin', 18)
print(xiaoxin)
# 私有化赋值
xiaoxin.setAge(120)
print(xiaoxin)
zilong = Student('zilong', 19)
print(zilong)
zilong.setName('zi')
print(zilong)
print(zilong.getName())
print(dir(Student))
print(dir(zilong))
#########################################
# 私有化进阶 在开发中的一些私有化处理,装饰器
class Students:
def __init__(self, name, age):
self.__name = name
self.__age = age
self.__socre = 49
@property
def age(self):
return self.__age
#先有set ,因为set 依赖get
@age.setter
def age(self, age):
if 0 < age < 100:
self.__age = age
else:
print('年龄输入错误')
#
# # get是为了取值(查询)
# def getAge(self):
# return self.__age
def setName(self, name):
if len(name) > 3:
self.__name = name
else:
print('名字长度不够')
def getName(self):
return self.__name
def __str__(self):
return f'姓名是:{self.__name},年龄是:{self.__age},考试分数是:{self.__socre}'
s = Students('zilong', 26)
print(s.getName())
print(s.age)
s.age = 18
print(s.age)