#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=name
self.__age=age
self.__score=59
#定义公有set和get方法
#set是为了赋值,get是为了取值
def setAge(self,age):
if age >0 and age<120:
self.__age=age
else:
print('年龄超出范围')
def getAge(self):
return self.__age
def setName(self,name):
if len(name)>0 and len(name)<10:
self.__name=name
else:
print('名字不是0-10位')
def getName(self):
return self.__name
def __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=name
self.__age=age
self.__score=score
def setName(self,name):
if len(name)==6:
self.__name=name
else:
print('输入名字不是6位')
def setAge(self,age):
if age>0 and age<=120:
self.__age=age
else:
print('年龄不在正确范围内')
@property
def score(self):
return self.__score
@score.setter
def score(self,score):
if self.__score>0 and self.__score<100:
self.__score=score
else:
print('分数不对')
def getName(self):
return self.__name
def getAge(self):
return self.__age
def __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)