Python中私有化(封装)

1、简单定义

  1. 封装:1、私有化属性。 2、定义公有set和get方法。
  2. __属性 :就是将属性私有化,访问权限仅在类中。

2、封装的好处

  1. 隐藏属性不被外界随意修改。

  2. 也可以修改:通过函数完成。

    #使用set函数
    def setXXX(self,xxx)
        #筛选赋值的内容
        if xxx是否符合条件
            赋值
        else:
            不赋值
    
  3. 如果想获取具体的某一个属性。

    #使用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)
发布了84 篇原创文章 · 获赞 36 · 访问量 4546

猜你喜欢

转载自blog.csdn.net/qq_41475583/article/details/104969656