加入收藏 | 设为首页 | 会员中心 | 我要投稿 宜春站长网 (https://www.0795zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

5“机”协同,共创行业新价值

发布时间:2021-02-11 18:55:25 所属栏目:评论 来源:互联网
导读:通过使用ASCII表,可以将消息转换为十进制值,然后转换为二进制值,接着逐个迭代像素值,在将像素值转换为二进制后,将每个最低有效位替换为序列中的该消息位。 要解码一个已编码的图像,只需颠倒这个过程:收集并存储每个像素的最后一位,将它们分成8个一组

通过使用ASCII表,可以将消息转换为十进制值,然后转换为二进制值,接着逐个迭代像素值,在将像素值转换为二进制后,将每个最低有效位替换为序列中的该消息位。

要解码一个已编码的图像,只需颠倒这个过程:收集并存储每个像素的最后一位,将它们分成8个一组,并将其转换回ASCII字符,以得到隐藏的信息。

PYTHON操作

试着使用Python库PIL和NumPY来逐步实现上述概念。

  • 步骤1:导入所有必需的python库

__dict__特殊方法(也称为dunder方法,在名称前后都有双下划线)能够显示对象的字典表示。具体来说,字典中的键-值对是对象的属性及其值。正如我们所看到的,除了bread和name属性之外,还有一个名为_dog__tag标记的属性。这个属性正是私有属性__tag通过一个称为mangling的过程与对象关联的方式。

具体来说,mangling或name mangling是使用_ClassName作为私有属性的前缀,这样我们就人为地创建了对这些“私有”属性的访问限制。但是,如果我们确实想检索任何私有属性,我们仍然可以使用被破坏的名称访问它,就像我们在代码片段中使用_dog__标记所做的那样。

5.受保护的属性

在上一节中,我们讨论了私有属性,但是受保护的属性呢?Python中与受保护属性对应的属性名称只有一个下划线。不像双下划线会导致混乱,单下划线前缀不会改变Python解释器处理这些属性的方式——它只是Python编程世界的一个惯例,表示他们(例如,编码器)不希望你访问这些属性。但是,如果你坚持要访问它们,你仍然可以这样做。让我们看看下面的代码。

在上面的更新之后,Dog实例将拥有一个名为tag的私有属性,正如其名称所示。实例对象仍然可以像以前一样访问它的其他属性(例如,名称)。然而,实例不能访问私有属性剩余的标记,这可能是我们所期望的。实际上,这种对访问这些属性的限制正是它们被称为“私有”属性的原因。但它是怎么发生的,在引擎盖下?毕竟,我前面提到过,所有Python属性在默认情况下都是公共的。下面将向您展示Python如何实现“私有”属性。
 

如上所示,我们首先创建了Dog类的一个实例。与其他OOP语言一样,实例对象可以直接调用实例方法bark。然而,Python与其他语言的不同之处在于,实例方法的调用是通过类来操作的,通过传递实例作为参数来调用定义的函数(即,dog .bark(dog))。换句话说,instance.inst_method()在本质上与Python中的Class.inst_method(instance)相同。

之所以可以这样做,是因为Dog类“拥有”实例方法,这是一种节省内存的机制,因为Python不需要为每个实例对象创建单独的函数副本。相反,当一个实例调用一个实例方法时,Python将调用委托给类,该类将通过传递实例调用相应的函数(它将被设置为已定义函数中的self参数)。

4.私有属性

如果您有OOP的经验,就不应该不熟悉访问修饰符的存在,比如public、private和protected。这些修饰符限制了可以访问修改的属性和函数的范围。然而,您很少在Python中听到这样的讨论。实际上,如果借用OOP中的术语,所有Python属性都是公共的。如上所示,在类和实例可以访问的地方,类和实例属性都可以自由访问。因此,严格地说,Python中没有真正的私有或受保护的属性(后面将讨论)。我们只是类比地使用这些术语,以便来自其他OOP背景的程序员更容易理解相关的编码约定(是的,只是一种约定,没有作为真正的访问控制加以加强)。

让我们首先讨论一下如何在Python中定义“私有”属性。惯例是用两个前导下划线命名这些属性,并且不超过一个后引下划线。考虑下面更新过的Dog类的示例—为了简单起见,我们省略了前面定义的其他属性。


(编辑:宜春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读