我是靠谱客的博主 害羞镜子,最近开发中收集的这篇文章主要介绍Python类的方法或特性变为“私有”方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

   Python并不直接支持私有方式,而是靠程序员自己把握在外部进行特性修改的时机。毕竟在使用对象前应该知道如何使用。但是,可以使用一些小技巧达到私有特性的效果。

"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量

"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据

   为了让方法或者特性变为私有(即使从外部无法访问),只要在他的名字前面加上双下划线即可:

__metaclass__ = type #确定使新式类
class Person:
__name = "xiaoli"
def __ingreet(self):
print("Hello,World!I'm %s."%self.__name)
def outgreet(self):
self.__ingreet()
    现在特性__name与方法__ingreet()从外界是无法进行访问的,而在类内部是可以访问的:
>>>foo = Person()
>>>foo.__ingreet()
AttributeError: 'Person' object has no attribute '__ingreet'
>>>foo.__name
AttributeError: 'Person' object has no attribute '__name'
>>>foo.outgreet()
Hello,World!I'm xiaoli.
   

   尽管双下划线有些奇怪,但是看起来像是其他语言中的标准私有方法。真正发生的事情才是不标准的。类的内部定义中,所有双下划线开始的的名字都被“翻译”成前面加上单下划线和类名的形式。

>>>Person._Person__ingreet()
Person._Person__ingreet()
    在了解了这些幕后的事情后,实际上还是能在类外访问这些私有方法,尽管不应该这样做:
>>>foo = Person()
>>>foo._Person__ingreet()
Hello,World!I'm xiaoli.
   

   简而言之,确保其他人不会访问对象的方法和特性是不存在的,但是类的“名称变化术”就是他们不应该访问这些函数或者特性的强有力的信号。

   如果不需要使用这种方法但是又想让其他对象不要访问内部数据,那么可以使用单下划线。这不过是一个习惯,但的确有实际效果。例如,前面带有下划线的名在都不会被带星号的import语句(form module import *)导入(有些语言支持多种层次的成员变量私有性。比如Java就支持4种级别。尽管单双下划线在某种程度上给出了两个级别的私有性,但是Python并没有真正的私有化支持)。




最后

以上就是害羞镜子为你收集整理的Python类的方法或特性变为“私有”方式的全部内容,希望文章能够帮你解决Python类的方法或特性变为“私有”方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部