python 前后\单双下划线的区别

本文介绍了Python中前后单双下划线的使用区别,包括它们在PEP8编码规范中的意义,以及如何影响方法和变量的作用域。前单下划线表示私有,但可间接访问;前双下划线防止子类重写;后单下划线用于区分关键字;前后双下划线通常用于内置的魔法方法。
摘要由CSDN通过智能技术生成

关于PEP8编码规范

使用过python的朋友们一定都知道,在python中,是不需要使用 ; 符号来区分行的,并且也很少使用 ( ) { } 来对代码块范围来进行定义,而是通过特定的代码缩进来进行区分,这就使得python相比java等语言来说,在编写风格上有了很高的自由度,但是高自由度对于程序猿本身是好事,但是对于程序猿之间的交流,却成了大难事。这时候,就有大佬站出来说了:“不行!我们要统一一种让所有人看起来都舒服的编码规范”,于是PEP8就应运而生。除了代码结构以外,我们也知道,在python中并没有类似于public、private、等这一类限制变量或方法的作用域的关键字,那么为了明确python中的方法和变量的作用域,python使用了下划线,也就是 “_” 符号来对这个问题进行处理,在PEP8中也有对其进行解释,话不多说,直接进入正题——python 前后\单双下划线的区别

前单下划线

首先我们先来了解在变量方法前加了一个单下划线的含义,其是指该方法和变量是私有的,外部不应该对其进行直接调用,有点类似于java中的private,但是又有所不同,要说其不同点就在于,java中的private是强制要求外部无法访问,但是python中的前单下划线则是名义上要求外部不应该访问,当时非要访问也是可以的,这就好像一个是法律层面的问题,而另一个是道德层面上的问题。

前单下划线修饰的成员变量,又被称之为保护变量,其指的是应该只能够被类对象和子类对象内部才能够访问到这些变量,举个栗子

class TESTA():

    def __init__(self):
        # 单下划线变量
        self._test = 10

    # 单下划线方法
    def _testfunction(self):
        print "this is a _testfunction"

    # 正确的调用单下划线变量的方式
    def gettest(self):
        return self._test

test = TESTA()
print test._test
print test.gettest()
test._testfunction()

输出结果

10
10
this is a _testfunction

可以看到,要强制去访问的话,还是可以访问到前单下划线修饰的方法和内容的,这里需要提示一点,那就是**单下划线修饰的方法,在引用该方法的时候,是不支持使用from module import * 的方法进行引用,而只能通过import module的方式引用该模块之后,再调用此方法。**举个栗子

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/2/2 10:25
# @Author : WellHold
# @File : my_module.py
# @Info:模拟module

def _testfunction1():
    print "_testfunction1"
def testfunction1():
    print "_testfunction1"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019年2月2日10:06:11
# @Author : WellHold
# @File : test.py
# @Info: python学习

from my_module import *
testfunction1()
_testfunction1()

输出结果

testfunction1
Traceback (most recent call last):
  File "I:/pythonWorkspace/studypython/test.py", line 11, in <module>
    _testfunction1()
NameError: name '_testfunction1' is not defined

Process finished with exit code 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值