对比Python中_,__,xx__xx
python中没有真正的私有化,但是有一些和命名有关的约定,来让编程人员处理一些需要私有化的情况。
_
的含义
`_xxx `不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
class A:
def _method(self):
print('约定为不在类的外面直接调用这个方法,但是也可以调用')
def method(self):
return self._method()
a = A()
a.method()
a._method()
输出:
约定为不在类的外面直接调用这个方法,但是也可以调用
约定为不在类的外面直接调用这个方法,但是也可以调用
类A中定义了一个_method方法,按照约定是不能在类外面直接调用它的
为了可以在外面使用_method方法,又定义了method方法,method方法调用_method方法。请看代码演示:
__
的含义:
`__xxx` 双下划线表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以
class A:
def __method(self):
print('This is a method from class A')
def method(self):
return self.__method()
class B(A):
def __method(self):
print('This is a method from calss B')
a=A()
b=B()
a.method()
b.method() 输出: This is a method from class A
This is a method from class A
#在类A中,__method方法其实由于name mangling技术的原因,变成了_A__method,所以在A中method方法返回的是_A__method,B作为A的子类,只重写了__method方法,并没有重写method方法,所以调用B中的method方法时,调用的还是_A__method方法:
#因此,在我们创建一个以"__"两个下划线开始的方法时,这意味着这个方法不能被重写,它只允许在该类的内部中使用。
a.__method()
#如果你试图调用a.__method,它还是无法运行的,就如上面所说,只可以在类的内部调用__method。 输出: ---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-b8e0b1bf4d09> in <module>()
----> 1 a.__method() AttributeError: 'A' object has no attribute '__method'
可以这样调用
a._A__method() This is a method from class A
class B(A):
def __method(self):
print('This is a method from calss B')
def method(self):
return self.__method()
#现在B中的method方法会调用_B__method方法:
b=B()
b.method() 输出: This is a method from calss B
__xx__
前后双下划线
也叫魔术方法,就是不需要人为调用的方法,基本就是在特定的时间自动触发
例1:
name = "igor"
name.__len__() 输出:
4 例2:
number = 10
number.__add__(20) 输出:
30
“xx”经常是操作符或本地函数调用的magic methods。在上面的例子中,提供了一种重写类的操作符的功能。
在特殊的情况下,它只是python调用的hook。例如,init()函数是当对象被创建初始化时调用的;new()是用来创建实例。
class CrazyNumber(object):
def __init__(self, n):
self.n = n
def __add__(self, other):
return self.n - other
def __sub__(self, other):
return self.n + other
def __str__(self):
return str(self.n)
num = CrazyNumber(10)
print(num)# 10
print(num + 5) # 5
print(num - 20) # 30 输出:
10
5
30
对比Python中_,__,xx__xx的更多相关文章
- Python中_,__,__xx__的区别
_xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. #! /usr ...
- Python中_,__,__xx__方法区别
_xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. 方法就是以单下 ...
- 接口测试基础——第7篇 Python中_、__、__func__之间的区别
今天的东西很少,主要是给自己做个笔记,顺便帮大家普及一下Python中的边角知识: 1.if __name__ == "__main__"是什么意思 答:一个.py文件,如果是自身 ...
- python中 _、__、__xx__() 区别及使用场景
1.访问权限(private.public)与继承方式(只有public继承) 在面向对象编程语言中,类的属性与方法都会设置访问控制权限,从而满足我们的设计需求.一般而言,我们通常会将对象的属性设置为 ...
- [Python]Python章1 Python中_的故事
_xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. 本文为译文,版 ...
- python中_、__、__xx__(单下划线、双下划线等)的含义
(1)_xxx "单下划线 " 开始的成员变量相当于私有变量,也叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问(可以定义有点像java中的ge ...
- python中class的定义及使用
#类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法. #对象:它是类的实例化. #方法:类中定义的函数. #类(Class) 由3个部分构成: ...
- 第8.33节 Python中__getattr__以及__getattr__与__ getattribute__的关系深入剖析
一. 引言 前面几节分别介绍了Python中属性操作捕获的三剑客:__ getattribute__方法.__setattr__方法.__delattr__方法,为什么__ getattribute_ ...
- python中 __name__及__main()__的使用
python中 __name__及__main()__的使用 #hello.py def sayHello(): str="hello" print(str); if __name ...
随机推荐
- pymysql.err.InterfaceError: (0, '')解决办法
导致这个错误的原因是通过pymysql连接MySQL,没有关闭连接的操作,所以短时间内不会出问题,长时间保持这个连接会出现连接混乱.虽然看着自己的代码没错,还是会报 pymysql.err.Inter ...
- ruby 知识点随笔
print .puts 和 p 方法的区别."" 与 '' 的区别. 处理控制台编码问题 >ruby -E utf-8 脚本文件名称 # 执行脚本 >irb -E u ...
- 记一次Springboot启动异常
启动Springboot项目报以下异常: org.springframework.context.ApplicationContextException: Unable to start web se ...
- C++打开剪切板,获取剪切板数据
if (::OpenClipboard(NULL) && ::IsClipboardFormatAvailable(CF_HDROP)) { HDROP hDrop = (HDROP) ...
- Spring-Boot之Redis基础
Spring-Boot之Redis基础 准备 Redis下载地址:github.com/MSOpenTech/redis/releases Redis数据库的默认端口号是 6379 开启Redis服务 ...
- javascript的数组之sort()
sort()方法用in-place的算法对原数组进行排序,但不会产生新的数组.这个方法不是一个稳定的排序,默认采用的是安字符串Unicode码点进行排序的. let fruit = ['cherri ...
- mysql中主外键关系
一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...
- 【立体几何】分类讨论很细节 Gym - 101967I Путешествие по тору
http://codeforces.com/gym/101967/attachments 题意:定义了一个甜甜圈.(torus) 不是让你二重积分啦233 现在有一个星球是甜甜圈形状的,它有四条很关键 ...
- Mybatis 使用了哪些设计模式?
https://mp.weixin.qq.com/s/ZTh4a-YST5RdIipHykWpPQ
- 解决HTML5提出的新的元素不被IE6-8识别的解决办法
解决HTML5提出的新的元素不被IE6-8识别的解决办法 <!--[if lt IE 9]> <script type="text/javascript" src ...