Bootstrap

python面向对象的私有化

面向对象的私有化

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

"""
好处:
1.隐藏属性不被外界随意修改
2.也可以通过函数来修改
3.要写函数set 并且可以控制修改的内容
4.如果想获取具体的某一个属性
使用get函数
"""


class Student:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
        self.__score = 60

    # 定义公有的set和get方法
    # set是为了赋值
    def setAge(self, age):
        if 0 < age < 120:
            self.__age = age
        else:
            print('年龄不在正常范围内')

    # get是为了取值
    def getAge(self):
        return self.__age

    # 修改名字的时候,设置名字的要求
    # 例 长度必须是六位
    def setName(self, name):
        if len(name) == 6:
            self.__name = name
        else:
            print('名字不是六位')

    def getName(self):
        return self.__name

    def __str__(self):
        return f'姓名{self.__name, self.__age, self.__score}'


xiaoming = Student('xiaoming', 18)
print(xiaoming)
xiaoming.setAge(20)
print(xiaoming)
xiaoming.setName('xiaohua')
print(xiaoming)

xiaocui = Student('xiaocui', 19)
print(xiaocui)

# 单独拿到小明的年龄
print(xiaoming.getAge())
print(xiaocui.getName())

"""
通过装饰器
"""


class Student:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
        self.__score = 60

    # 先有它的返回值相当于get
    @property
    def age(self):
        return self.__age

    # 再有set可以改变属性值
    @age.setter
    def age(self, age):
        if 0 < age < 120:
            self.__age = age
        else:
            print('年龄不在正常范围内')

    def __str__(self):
        return f'姓名{self.__name, self.__age, self.__score}'


xiaoming = Student('xiaoming', 18)
print(xiaoming)
xiaoming.age = 30
print(xiaoming)
;