python中单下划线(_)和双下划线(__)的特殊用法
单下划线开头(_)
- 在模块中使用单下划线开头
模块中使用单下划线(_)开头定义函数、全局变量和类不能被模块外部以:from module import *形式导入。
但可以用:from module import _func形式单独导入。
当然定义函数、全局变量和类前面有2个或者更多下划线开头也不可以用from module import *的形式导入。
# 单下划线开头的函数
def _my_abs(num):
return 'my_abs:' + str(abs(num))
# 单下划线开头的全局变量
_My_var
# 单下划线开头的类
_My_Class:
pass
- 在类中使用单下划线开头
带单下划线的类变量、实例变量和方法,允许类内部、类实例和子类访问,不受限制。
单下划线仅仅是一种私有申明约定,访问不受限制。
双下划线开头(__)
- 在class类的内部,带双下划线的类变量、实例变量、方法具有正常访问权限。
- 在继承结构中,带双下划线的基类的类变量和实例变量不能被子类直接访问。
- 在实例中,带双下划线的类变量、实例变量、方法不能被直接访问。但有办法间接访问。
双下划线开头的类变量、实例变量、方法在继承和实例中可以间接访问
双下划线开头的变量和方法替换为`单下划线+类名+双下划线开头的变量和方法`的形式,且双下划线开头的变量和方法后面最多只能以一个单下划线结束,否则也无法访问。
class BaseCls:
def __init__(self, name, age, nick_name):
self.name = name
self.__nick_name_ = nick_name # __nick_name后面最多以一个_结束,否则通过基类名混淆的方式也无法访问了。
self.age = age
class SubCls(BaseCls):
def __init__(self, name, age, addr, nick_name):
super().__init__(name, age, nick_name)
self.addr = addr
self.a_nick_name = self._BaseCls__nick_name_
python中单下划线(_)和双下划线(__)的特殊用法的更多相关文章
- python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名
python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...
- python单下划线、双下划线、头尾双下划线说明:
单下划线.双下划线.头尾双下划线说明: __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的. _foo: 以单下划线开头的表示的是 protected 类 ...
- python类中方法加单下划线、双下划线、前后双下滑线的区别
首先看一段代码: class Foo(): def __init__(self): print "__init__ method" def public_method(self): ...
- Python模块是否支持自定义属性使用双下划线开头和结尾?
我们知道在Python中,变量名类似__xxx__的,也就是以双下划线开头并且以双下划线结尾的变量和方法,是特殊变量,特殊变量是可以直接访问的,不是私有变量,所以,一般实例变量和类变量以及方法不能用_ ...
- Python - 面向对象编程 - 魔术方法(双下划线方法)
什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...
- 百万年薪python之路 -- 面向对象之 反射,双下方法
面向对象之 反射,双下方法 1. 反射 计算机科学领域主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性.python ...
- python 实例属性之单,双下划线
具体区别看下面例子 class A: def __init__(self,name='Andy'): self._name = name class B: def __init__(self,name ...
- python(七) Python中单下划线和双下划线
Python中单下划线和双下划线: 一.分类 (1).以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量. 以单下划线开头的变量和函数被默认是内部函数,使用from mod ...
- Python3 单下划线_双下划线__开头
Python 中,下划线对解释器有特殊的含义,而且是内建标识符所使用的符号,使用时要多加留意. 在 Python3 的面向对象中,双下划线开头的变量和方法表名为私有变量和私有方法. __private ...
- 【编程开发】Python隐藏属性——使用双下划线标识私有属性,外部不可直接访问
from:https://zhuanlan.zhihu.com/p/30553607 小编在最初使用上Python之后,就一发不可收拾,人生苦短.我用Python,不光是因为其优雅简洁, ...
随机推荐
- 前端VUE环境构建
https://nodejs.org/en/ 安装node 安装淘宝npm镜像 D:\>cd cnpm D:\cnpm>npm install -g cnpm --registry=htt ...
- 【leetcode】1033. Moving Stones Until Consecutive
题目如下: Three stones are on a number line at positions a, b, and c. Each turn, you pick up a stone at ...
- web选择文件夹上传
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- [USACO17DEC]Barn Painting (树形$dp$)
题目链接 Solution 比较简单的树形 \(dp\) . \(f[i][j]\) 代表 \(i\) 为根的子树 ,\(i\) 涂 \(j\) 号颜色的方案数. 转移很显然 : \[f[i][1]= ...
- FastDFS整合nginx(三)
一 安装 百度云:所有附件的地址 unzip fastdfs-nginx-module-master.zip [root@node02 mnt]# cd fastdfs-nginx-module-ma ...
- CSU 1553 Good subsequence(RMQ问题 + 二分)
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1553 Description Give you a sequence of n nu ...
- Apache启动报错:Invalid command 'AuthType', perhaps misspelled or defined by a module not included in it
在apache配置文件里面加了AuthType PFApacheAgent,,结果重启apache的时候歇菜了,,总是报上面的错, <Directory />AllowOverride n ...
- 【CDN+】 CDN项目的两大核心--缓存与回源
前言 项目中碰到CDN专用名词: 回源, 然后不知道什么意思,反过来查询了一下CDN相关的一些基本术语,特做记录 CDN基础概念 CDN (Content Delivery Network,即内容分发 ...
- android7.0对于SharedPreferences设置模式的限制
错误信息: 03-28 10:16:12.701 830 932 E AndroidRuntime: FATAL EXCEPTION: Thread-903-28 10:16:12.701 ...
- vue中的导航钩子
//钩子 登录拦截 router.beforeEach((to, from, next) => { const sessionToken = window.sessionStorage.getI ...