我是靠谱客的博主 可耐冬日,最近开发中收集的这篇文章主要介绍python私有、公有、专有,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

私有方法

某些对象(属性、方法、函数、类等)只能够在某个范围内访问,出了这个范围就不能访问了,这是“公”、“私”之分。此外,还会专门为某些特殊的东西指定一些特殊表示,比如类的名字用 class,方法用 def,这就是保留字。除了保留字,Python 中还为类的名字做了某些特殊准备,就是“专有”的范畴。

以“__”双划线开头的,将这类命名的函数/方法称之为“私有函数”。所谓“私有”,即:

  • 私有函数不可以从它们的模块外面被调用
  • 私有类方法不能够从它们的类外面被调用
  • 私有属性不能够从它们的类外面被访问

跟私有的对立面就是公有。有的编程语言(如Java、C)用特殊的关键词来说明某函数或方法或类是私有还是公有。

如果一个 Python 方法、类方法或属性的名字以两个下划线开始,但不是结束,则它是私有的,否则,是公有的。类方法或者是私有 (只能在它们自已的类中使用) 或者是公有 (任何地方都可使用)。例如:

class Person:
    def __init__(self,name):
        self.name = name
    def __work(self,salary):
        print "%s salary is:%d"%(self.name,salary)

其中,’__work()’ 是一个私有方法。

class Person:
    def __init__(self,name):
        self.name = name
        print(self.name)  
    def __work(self,salary):
        print "%s salary is: %d"%(self.name,salary)
        
if __name__=="__main__":
    officer = Person("Tom")
    officer.__work(1000)

#运行结果
Tom
Traceback (most recent call last):
  File "225.py", line 14, in <module>
    officer.__work(1000)
AttributeError: Person instance has no attribute '__work'

‘__work(self, salary)’ 私有方法,无法在类外调用(其实类外可以调用私有方法,就是太麻烦,况且也不提倡,故滤去)。将上述方法进行修改:

class Person:
    def __init__(self,name):
        self.name = name
        print self.name 
    def __work(self,salary):
        print "%s salary is: %d"%(self.name,salary)    
    def worker(self):
        self.__work(500)        #在类内部调用私有方法

if __name__=="__main__":
    officer = Person("Tom")
    #officer.__work(1000)
    officer.worker()

#运行结果
Tom
Tom salary is: 500

专有方法

如果是以双划线开头,但不是以它结尾,所命名的方法是私有方法;如果以双划线开头,并且以双划线结尾,所命名的方法就是专有方法。

例如,Python 里常用的专有方法 “init()”:

class Aggregator(object):
    def __init__(self, batch_size, dim, dropout, act, name):
        if not name:
            layer = self.__class__.__name__.lower()
            name = layer + '_' + str(get_layer_id(layer))
        self.name = name
        self.dropout = dropout
        self.act = act
        self.batch_size = batch_size
        self.dim = dim

    def __call__(self, self_vectors, neighbor_vectors, neighbor_relations, user_embeddings):
        outputs = self._call(self_vectors, neighbor_vectors, neighbor_relations, user_embeddings)
        return outputs

专有方法除了 ‘init()’ 之外,还有诸如:‘str’,‘setitem’ 等等,要向看,可以利用 dir() 函数在交互模式下看看某个函数里面的专有方法,当然,也可以自己定义。

另外,再Python中,还有一种习惯,是约定熟成的,即单下划线。双下划线和单下划线的区别如下:

形式说明
私__xx这是私有变量, 只有内部可以访问,外部不可以访问。但是也不是一定不可以访问,只是解释器把该变量解释成 _类名__xx 。但最好不要这样做,养成良好编程习惯
单_x这是实例变量,可以访问,但是不要轻易访问。按照约定俗成,当你看到这样的变量时,意思就是,“虽然我可以被访问,但请把我视为私有变量,不要随意访问”。
专__xx__这是特殊变量。特殊变量是可以直接访问的,不是private变量。我们自己最好不要定义这样的变量。可以通过特殊变量查询一些信息,如__name__可以判断本模块是被引用的还是正在当程序运行。

最后

以上就是可耐冬日为你收集整理的python私有、公有、专有的全部内容,希望文章能够帮你解决python私有、公有、专有所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部