目录
封装:提高程序的安全性
- 将属性和方法包装到类对象中,在方法内部对属性进行操作,在类对象外部调用方法,使得程序更加简洁
- 在python中,如果该属性不希望在类对象外部被访问,前边可以加两个“_”
封装
简洁
先定义一个类
class Student:
def __init__(self, name):
self.name = name
def eat(self):
print(self.name + '在打蜗牛')
我们在编译器旁边可以看到一个减号,点击这个减号可以让我们的类中的对象都收录起来
然后我们来创建这个类的对象
当我们输入这个'.'的时候就可以看到这个类中的方法了
然后我们使用这些方法
sws_1 = Student('慢蜗牛')
sws_1.eat()
print(sws_1.name)
结果如下:
慢蜗牛在打蜗牛
慢蜗牛
那么这个就是我们的封装了
私有方法
在python中,如果该属性不希望在类对象外部被访问,前边可以加两个“_”
class Student:
def __init__(self, name, age):
self.name = name
self.__age = age # 不想被别人知道年龄,所以加__进行保密操作
def show(self):
print(self.name, self.__age)
sws_1 = Student('慢蜗牛', 20)
sws_1.show()
然后我们在类的外部使用name和age看看
# 在类的外部使用name与age看看
print(sws_1.name)
print(sws_1.__age)
结果如下:
慢蜗牛 20
慢蜗牛
Traceback (most recent call last):
File "D:\pythonProject\main.py", line 15, in <module>
print(sws_1.__age)
AttributeError: 'Student' object has no attribute '__age'
我们可以看到,报错显示这里Student类中没有__age这个属性
但是这个加两个'_'的操作其实是可以被使用的,我们这里使用dir()函数,如下:
print(dir(sws_1))
#结果如下
['_Student__age', '__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__', 'name', 'show']
我们可以看到sws_1中拥有的属性和方法,这个时候可以看到第一个属性'_Student__age'
这个时候我们就可以使用这个来进行访问了
print(sws_1._Student__age)
#结果如下
20
这个时候就有人要问了,既然都可以访问,那我们封装岂不是多余的操作吗
其实这就要看我们程序员的自觉性了,看到两个下划线的属性就不要去访问了
因为主人不希望我们去访问,但是这是靠自觉的啦
其实世界上各种加密算法都是可以被破解的,一切都靠自觉而已