小编在最初使用上Python之后,就一发不可收拾,人生苦短、我用Python,不光是因为其优雅简洁,更是因为它强大的扩展性,特别是一些Python内置的私有属性,熟练地掌握之后使得在开发过程中更灵活、更高效,今天小编就细数一些常用的私有属性,希望能够帮助到新手朋友们。

Python的隐藏属性无处不在,内置的私有属性往往是双下划线开头,双下划线结尾,这里我们从模块到对象,由上往下的来列举常用的属性用法。

模块属性

1、__ name__

当python文件被直接运行时,__ name__的值为__main__,而当python文件以模块的形式被导入时,__name__的值为模块名

def say_hello():print helloif __name__ == __main__:say_hello()

上面的代码是最为常见的__name__的使用方式,当文件中有上述代码后,直接运行脚本则会执行say_hello方法,通过import形式导入脚本文件时则不会执行say_hello。

2、__ file__

在python模块中使用__file__来获取脚本所在的路径,但得到的是相对路径,若希望得到绝对路径可使用os.path.realpath(__ file__)

3、__ all__

__all__指定的是当包被import * 的时候, 哪些模块会被import进来

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#test1.py
import os, sys
__all__ = [os]#test2.py
from test1 import *
sys.path
ImportError: No module named sys

上述代码可以看出,本来导入test1模块时,os、sys也会被一并导入进来,但是__all__属性限定了只导入os,所以sys并没有被导入进来。

4、__ path__

__ path__指定了包的搜索路径,默认情况下只有一个元素, 就是当前包的路径, 修改__path__, 可以修改此包内的搜索路径,修改该属性类似于修改sys.path

类、实例属性

1、__ class__

__class__属于实例的属性,直接指向该实例的类对象

class A(object):passa = A()

a.__class__等同于A

2、__ dict__
对象的属性字典,key为属性名,value为该属性的值

注:__dict__若被实例对象引用则列出实例对象的属性,若被类引用则列出类属性

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class A():  def __init__(self):  self.x=1   #定义一个实例属性  y = 2          #定义一个类属性  a = A()
a.__dict__
{'x': 1}
A.__dict__
{'__doc__': None,'__init__': function __main__.__init__'__module__': '__main__','y': 2}

上述代码可以看出,实例对象a的__dict__属性只包含实例属性x,而类A的__dict__属性则包含了所有类属性

3、__ slots__

__slots__限制了类中只能定义某些属性

class Test(object):__slots__ = ['a']test = Test()
test.a = 1
test.b = 1
AttributeError: 'Test' object has no attribute 'b'

__slots__限定了属性集只能包含’a’,所以在定义属性’b’时报出错误。

4、__ new__、__ init__

继承自object的新式类才有__new__

__ new__在实例被创建时调用,__init__在实例创建后的初始化时调用,所以先调用__new __ ,然后调用__init __

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class A(object):    def __init__(self):print initdef __new__(cls,*args, **kwargs):print new %s%clsreturn object.__new__(cls, *args, **kwargs)A()# 输出
new class '__main__.A'
init

__new__方法必须返回一个实例对象

5、__ del__

相当于类的析构函数,当类对象被销毁前调用

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class MyClass(object):def __del__(self):print hehea = MyClass()
del a
hehe

6、操作符类属性

  • __ str__:str()或print时调用

  • __ len__:len()时调用

  • __ cmp__:cmp()时调用

  • __ lt__,__ gt__,__ eq__:,=时被调用

  • __ add__,__ sub__,__ mul__,__ div__:+、-、*、/时被调用

  • __ getitem__,__ setitem__,__ delitem__:列表引用、设置、删除时被调用

这些操作符类属性是Python类的内置类方法,往往当需要重载操作符时重载相应的类方法即可。

7、自定义私有属性

在定义类属性时,若在该属性前加上__,则该属性被定义为私有属性,即该属性不可被外部直接引用,只能在类的内部使用

class A(object):def __init__(self):self.__a = 1def func(self):print self.__aa = A()
a.func()
#输出
1
a.__a
#输出
AttributeError: 'A' object has no attribute '__a'

然而Python对__a这个属性做了什么呢?实际上该属性并不是不存在的,当在某个属性前加上两个下划线后,python自动将其所在的类名追加在属性前导致其拥有了新的属性名,也由此实现了该属性不可引用的假象

class A(object):def __init__(self):self.__a = 1def func(self):print self.__aa = A()
a._A__a
#输出
1

Python隐藏属性相关推荐

  1. 【编程开发】Python隐藏属性——使用双下划线标识私有属性,外部不可直接访问...

    from:https://zhuanlan.zhihu.com/p/30553607 小编在最初使用上Python之后,就一发不可收拾,人生苦短.我用Python,不光是因为其优雅简洁,更是因为它强大 ...

  2. 传智播客python笔记_python传智播客笔记--第十天:隐藏属性,私有属性,私有方法,__del__方法,类的继承,类中方法的重写...

    封装,继承,多态 隐藏属性,私有属性,私有方法,__del__方法,类的继承,类中方法的重写 -**************************************************** ...

  3. python加上子类的特性_Python--面向对象三大特性

    一.面向对象三大特性 什么是类的继承? 类的继承跟现实生活中的父.子.孙子.重孙子.继承关系一样,父类又称为基类. python中类的继承分为:单继承和多继承 1.继承 1 class ParentC ...

  4. python隐藏部分代码_python隐藏类中属性的3种实现方法

    方法一: 效果图一: 代码一: # 定义一个矩形的类 class Rectangle: # 定义初始化方法 def __init__(self,width,height): self.hidden_w ...

  5. Python学习的十个阶段,学完大成,对应一下看看你自己在哪个阶段

    大家好,我是梦雅. \ 今天给大家整理了Python学习的十个阶段内容,看看你现在正处于哪个阶段,想学习的朋友也可以根据这个阶段规划学习. \ \ \ 阶段一:Python基础[ 初入江湖] \ Li ...

  6. python面向对象重新梳理

    关于本篇博文: 面向对象中所有的内容的重新梳理,其实面向对象的知识早在一个多月前就学习过并整理过,但是发现还是有所欠缺,故在此以极其简介的语言风格重新梳理一遍 面向对象详细介绍:http://www. ...

  7. python常用知识点总结-python 类知识点总结

    python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...

  8. python对象编程例子-python面向对象编程练习

    练习题 1.面向对象三大特性,各有什么用处,说说你的理解. 面向对象的三大特性: 1.继承:解决代码的复用性问题 2.封装:对数据属性严格控制,隔离复杂度 3.多态性:增加程序的灵活性与可扩展性 2. ...

  9. python基础入门视频-Python基础入门视频课程——笔记

    Python基础,主讲:汤小洋 一.Python简介 1. Python是什么? ​ Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(龟叔)于1989年 ...

最新文章

  1. 习题:八数码难题(双向BFS)
  2. Android7.1修改系统默认多媒体音量大小
  3. mysql特效_MySQL树 – 前端开发,JQUERY特效,全栈开发,vue开发
  4. openresty测试lua脚本配置示例
  5. 【Attention九层塔】注意力机制的九重理解
  6. http://www.jianshu.com/p/42e11515c10f#
  7. 接口框架 python+unittest+request+HTMLTestRunner
  8. python tkinter画笑脸_tkinter绘制红绿灯图案
  9. NQL.Net 简介
  10. python组合数计算cmnn_《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感...
  11. 在浏览器地址栏中,传数组参数
  12. 信息科学技术与创新之“知识升华”
  13. 我的基金组合和选择标准
  14. 剑指offer:用两个栈实现队列
  15. Libero逻辑分析仪的使用(基本篇)
  16. 什么是SDK? {转载}
  17. 国标GB/T28181协议下EasyGBS互联网无插件视频播放器起播慢或延迟高问题解决方案
  18. python 中 np.sum()函数 通俗易懂理解!
  19. 专家级解说缓存服务器负载均衡概念
  20. html手机端下拉菜单代码,jQuery手机移动端下拉列表选择代码

热门文章

  1. I.MX6 Android busybox 从哪里生成的
  2. Linux网络服务之DNS(1)
  3. 【转载】如何做一份突出的PPT
  4. PHP调用wsdl文件类型的接口代码分享
  5. 财务思维02-资产边界
  6. SAP创建生产订单时要求输入销售订单
  7. SAP - 银企直联
  8. SAP与Ariba在数据分析领域的互补共赢
  9. M8100-Table T169P: entry 1510 does not exist
  10. SAP错误问题汇总(转)