python_面向对象——双下划线方法
1.__str__和__repe__
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return 'stf:我叫{},今年{}岁'.format(self.name,self.age)
def __repr__(self):
return 'repr:我叫{},今年{}岁'.format(self.name, self.age)
p = Person('wdc',22)
print(repr(p))
print(str(p))
print(p)

str函数或者print函数调用时 = obj.__srt__()
repr函数或者交互式解释器中调用时 = obj.__repr__()
这两个方法的返回值必须是字符串,否则会抛出异常
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
# def __str__(self):
# return 'stf:我叫{},今年{}岁'.format(self.name,self.age)
def __repr__(self):
return 'repr:我叫{},今年{}岁'.format(self.name, self.age)
p = Person('wdc',22)
print(repr(p))
print(str(p))
print(p)

如果__str__没有被定义,那么就会使用__repr__来代替输出。
2.__del__析构方法
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __del__(self):
print('析构方法')
p = Person('wdc',22)
print('')
print('')
del p #删除对象p
print('')
print('')
当对象再内存中被释放时,自动触发执行。
3.__new__方法
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
print(self.name)
def __new__(cls, *args, **kwargs):
# 负责执行__init__,进行一些初始化前的工作
print(cls,args,kwargs)
return object.__new__(cls)
p = Person('wdc',22)

当有__new__方法时,不执行__init__方法,直接执行__new__方法,如果要想知道__init__方法,就要在__new__中返回:object.__new__(cls)
__new__方法实现单例模式:
class Person(object):
tasks = []
instance = None
def __init__(self,name):
self.name = name def add_task(self,job):
self.tasks.append(job)
print('{}添加任务{},共{}个任务'.format(self.name,job,len(self.tasks))) def __new__(cls, *args, **kwargs):
# 只有第一次实例化的时候,正常精选,后面每次实例化,并不正在创建一个新实例
if cls.instance == None:
# 进行正常的实例化,并把实例化后的对象,村再cls.instance中
obj = object.__new__(cls) #实例化过程
cls.instance = obj #把实例化好的对象存下来
return cls.instance #以后的每次实例化,直接返回第一次村的实例对象 p1 = Person('wdc')
p2 = Person('yhf')
p3 = Person('qqq') p1.add_task('w')
p2.add_task('d')
p3.add_task('c')

4.__call__方法
:在对象后加括号执行
class Per(object):
def __init__(self,name):
self.name = name
def __call__(self, *args, **kwargs):
print(self,args,kwargs)
p = Per('wdc')
p.__call__()
p()

python_面向对象——双下划线方法的更多相关文章
- python面向对象双下划线方法与元类
目录 双下划线方法(__) 元类简介 产生类的两种表现形式 元类的基本使用 元类进阶操作 __new__方法 双下划线方法(__) 面向对象中的双下方法也有一些人称之为是魔法方法,有些双下方法不需要刻 ...
- Python - 面向对象编程 - 魔术方法(双下划线方法)
什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...
- python类中的双下划线方法
__getitem__,__setitem__和__delitem__ 实现了对象属性的字典化操作. class Person: def __init__(self, name, age, hobby ...
- python类中方法加单下划线、双下划线、前后双下滑线的区别
首先看一段代码: class Foo(): def __init__(self): print "__init__ method" def public_method(self): ...
- Python面向对象 | 双下方法
定义:双下方法是特殊方法,他是解释器提供的.由双下划线+方法名+双下划线 .它具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更 ...
- ORM( ORM查询13种方法3. 单表的双下划线的使用 4. 外键的方法 5. 多对多的方法 ,聚合,分组,F查询,Q查询,事务 )
必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或 ...
- Python笔记_第三篇_面向对象_4.单下划线和双下划线
说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...
- python 面向对象三 访问权限 下划线 双下划线
一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...
- Python3 单下划线_双下划线__开头
Python 中,下划线对解释器有特殊的含义,而且是内建标识符所使用的符号,使用时要多加留意. 在 Python3 的面向对象中,双下划线开头的变量和方法表名为私有变量和私有方法. __private ...
随机推荐
- IDEA中的,让光标回到上一次停留的地方
IDEA中的,光标返回到上一次停留的地方ctrl+alt+ ←IDEA中的,光标返回到下一次停留的地方ctrl+alt+ → 不过要小心,笔记本电脑,默认的翻转屏幕的快捷键和这个冲突..我的选择是关闭 ...
- Select 查询语句
1.1 查询语句 1.1.1 select select 用于从数据看查询数据.语法 select field1,filed2,.. . from tablename [where cond ...
- [转帖]CentOS 7 安装 GlusterFS
CentOS 7 安装 GlusterFS https://www.cnblogs.com/jicki/p/5801712.html 改天测试一下 我一直没有搞这一块呢. CentOS 7 Glu ...
- Spyder中报错: Check failed: PyBfloat16_Type.tp_base != nullptr
报错问题: 问题1:tensorflow/python/lib/core/bfloat16.cc:675] Check failed: PyBfloat16_Type.tp_base != nullp ...
- QT release版QAudioDeviceInfo获取不到音频设备,而debug版可以获取到
新添加了两个模块:QCharts和Multimedia 但自己没有重新打包更新里面的库文件什么的... 坑爹... 害我找了这么久... 解决办法: 方法一: 将Qt安装目录下的plugins文件夹中 ...
- RHEL 6.5 安装Docker
一,配置远程yum源二,下载依赖包1.安装downloadonly插件使用yum下载rpm包2.下载docker需要的依赖包三,安装docker(离线节点)1. 依次执行docker的安装包2. 启动 ...
- 在vue中使用ElementUI
完整引用ElementUI: 安装:在需要使用到的vue项目目录下,使用npm下载安装: npm/cnpm i element-ui -S/--save <!-- 引入样式 --> < ...
- 使用MD5加密字符串
一.概念: MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值. 二 ...
- 学习笔记之Google
Google Pro Tip: Use Back-of-the-envelope-calculations to Choose the Best Design - High Scalability - ...
- 11/8 (tell tales web)
1.visual perception gestalt theory:格式塔学派是心理学重要流派之一,兴起于20世纪初的德国,又称为完形心理学.由马科斯·韦特墨.沃尔夫冈·苛勒和科特·考夫卡三位德国心 ...