1、简单定义
- 封装:1、私有化属性。 2、定义公有set和get方法。
- __属性 :就是将属性私有化,访问权限仅在类中。
2、封装的好处
-
隐藏属性不被外界随意修改。
-
也可以修改:通过函数完成。
#使用set函数 def setXXX(self,xxx) #筛选赋值的内容 if xxx是否符合条件 赋值 else: 不赋值
-
如果想获取具体的某一个属性。
#使用get函数 def getXXX(self): return self.__xxx
3、示例
class Student:
__age = 18 #类属性
def __init__(self,name,age):
self.name = name
self.age = age
self.__score = 59
#定义公有set和get方法
def setScore(self,score):
if score >= 0 and score <= 100:
self.__score = score
else:
print('分数不再范围内')
def getScore(self):
return self.__score
def __str__(self):
return '姓名:{},年龄:{},考试分数:{}'.format(self.name,self.age,self.__score)
jason = Student('Jason',18)
print(jason)
#输出结果为:姓名:Jason,年龄:18,考试分数:59
#jason.__score = 95 #报错 IndentationError: unexpected indent
jason.setScore(95)
print(jason.getScore())
#补充:通过dir()系统函数查看类和对象方法和属性(不含私有)
print(dir(jason))
'''
输出:['_Student__age', '_Student__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__', 'age', 'getScore', 'name', 'setScore']
'''
4、使用装饰器私有化处理
先使用@property装饰getXXX函数,再使用@getXXX.setter装饰get函数。开发的时候一般都会使用,这样的封装性更好些。调用的方式也更简洁。
# 在开发总看到一些私有化处理:装饰器
class Student:
def __init__(self,name,age):
self.name = name
self.__age = age
@property
def getAge(self):
return self.__age
# 再有set,因为set依赖get
@getAge.setter
def setAge(self,age):
if age>0 and age<140:
self.__age = age
else:
print('年龄不在范围内')
def getName(self):
return self.name
def __str__(self):
return '姓名:{},年龄:{}'.format(self.name,self.__age)
s = Student('jason',20)
s.age = 80
print(s.age)