概述
私有方法
某些对象(属性、方法、函数、类等)只能够在某个范围内访问,出了这个范围就不能访问了,这是“公”、“私”之分。此外,还会专门为某些特殊的东西指定一些特殊表示,比如类的名字用 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私有、公有、专有所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复