#encoding=utf-8
#私有化
#封装:1.私有化属性部分;2.定义共有的set和get方法
#__属性:就是将属性私有化,访问范围仅仅限于类中
'''
好处:
1.隐藏属性不被外界修改
2.也可以修改:通过set方法修改
def setXXX(self,XXX):3.筛选内容if xxx是否符合条件:赋值else:不赋值
3.如果想获取某个具体的属性可以使用def getXXX(self):
return self.__XXX
'''
class Student:# __age=18 #类属性def __init__(self,name,age):self.__name=nameself.__age=ageself.__score=59#定义公有set和get方法#set是为了赋值,get是为了取值def setAge(self,age):if age >0 and age<120:self.__age=ageelse:print('年龄超出范围')def getAge(self):return self.__agedef setName(self,name):if len(name)>0 and len(name)<10:self.__name=nameelse:print('名字不是0-10位')def getName(self):return self.__namedef __str__(self):# return "Name:"+self.name+"\nAge:"+str(self.age)+'\nScore:'+str(self.__score)return "姓名:{},年龄{},考试分数{}".format(self.__name,self.__age,self.__score)#attribute
s1=Student('kate',19)
print(s1)
s1.setAge(20)
print(s1)
s1.setName('katherine')
print(s1)
print(s1.getName())
print(dir(Student))
print(dir(s1))
print(s1.__dir__())
s1._Student__age=25#其实它就是__age,只不过系统自动改名字了
print(s1)
#在开发中看到的一些私有化处理,装饰器@property,可以将私有化改成和非私有化一样的调用
class Student:def __init__(self, name, age, score):self.__name=nameself.__age=ageself.__score=scoredef setName(self,name):if len(name)==6:self.__name=nameelse:print('输入名字不是6位')def setAge(self,age):if age>0 and age<=120:self.__age=ageelse:print('年龄不在正确范围内')@propertydef score(self):return self.__score@score.setterdef score(self,score):if self.__score>0 and self.__score<100:self.__score=scoreelse:print('分数不对')def getName(self):return self.__namedef getAge(self):return self.__agedef __str__(self):return ('姓名是:{};年龄是{},考试分数是:{}'.format(self.__name, self.__age, self.__score))s1=Student('kate',20,88)
print(s1)
s1.Name('kather')
s1.score=90
print(s1.score)
print(s1)