Python——面向对象(2)--- 私有化(set(),get().....)

1.私有化

# 私有化
# __属性  : 将属性私有化
# 私有化之后访问范围仅限于类中
'''
优点:
1.隐藏属性不被外界随意修改
2.也可以修改,通过函数set()
3.取值:函数get()

'''

# 封装:
# 1.私有化属性
# 2.定义共有set和get方法


class Stu:

    def __init__(self,name,age):
        # 不希望外界修改属性的时候,将其私有化
        self.__name = name
        self.__age = age
        self.__score = 60

    # 定义共有set和get方法
    # set  赋值
    def setAge(self,age):
        if age>0 and age<20:
            self.__age = age
        else:
            print('年龄不在正确范围内')

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


xingxing = Stu('刘星',15)
# print(xingxing.name)  # 此时是访问不到的
xingxing.setAge(16)
print(xingxing.getAge())   # 16

print(dir(Stu))
# ['__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__', 'getAge', 'setAge']

print(dir(xingxing))
# ['_Stu__age', '_Stu__name', '_Stu__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__', 'getAge', 'setAge']

2.私有化--property装饰器方式

# 开发中看到一些私有化处理:装饰器
# property


class Stu:

    def __init__(self,name,age):
        self.name = name
        # 不希望外界修改属性的时候,将其私有化
        self.__age = age
        self.__score = 60

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self,age):
        if age > 0 and age < 20:
            self.__age = age
        else:
            print('年龄不在正确范围内')


s = Stu('hah',15)
print(s.name)   # hah

# 修改age值,可以像非私有属性一样操作
s.age = 18

# 可以直接调用,可以像非私有属性一样操作
print(s.age)    # 18

 

你可能感兴趣的:(Python学习分享)