python之封装及私有方法

目录

封装

简洁

私有方法


封装:提高程序的安全性

  • 将属性和方法包装到类对象中,在方法内部对属性进行操作,在类对象外部调用方法,使得程序更加简洁
  • 在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

这个时候就有人要问了,既然都可以访问,那我们封装岂不是多余的操作吗

其实这就要看我们程序员的自觉性了,看到两个下划线的属性就不要去访问了

因为主人不希望我们去访问,但是这是靠自觉的啦

其实世界上各种加密算法都是可以被破解的,一切都靠自觉而已

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放氮气的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值