1. print( 坑的信息 )

  • 挖坑时间:2019/04/07
  • 明细
坑的编码 内容
Py023-2 对类的常用魔术方法举例

2. 开始填坑

2.1 _init_()

class Fish(object):
def __init__(self, name):
self.name = name
print("My name is:", self.name) f1 = Fish("fish_9527")

>>>

My name is: fish_9527

2.2 _new_()

# 1.0

class Fish(object):
def __new__(cls, *args, **kwargs):
# 创建对象时,new 方法会被自动调用
print("创建对象,分配空间") def __init__(self):
print("Fish 类初始化") f1 = Fish()
print(f1)

>>>

创建对象,分配空间

None

# 2.0

class Fish(object):
def __new__(cls, *args, **kwargs):
# 创建对象时,new 方法会被自动调用
print("创建对象,分配空间") # 为对象分配空间,并返回对象的引用
return super().__new__(cls) def __init__(self):
print("Fish 类初始化") f1 = Fish()
print(f1)

>>>

创建对象,分配空间
Fish 类初始化
<__main__.Fish object at 0x000002769064EF28>
# 3.0 单例模式

class Fish(object):
# 记录第一个被创建对象的引用
instance = None def __new__(cls, *args, **kwargs):
# 判断雷属性是否是空对象
if cls.instance is None:
# 调用父类的方法,为第一个对象分配空间
cls.instance = super().__new__(cls) # 返回类属性保存的对象的引用
return cls.instance f1 = Fish()
print(f1) f2 = Fish()
print(f2)

>>>

<__main__.Fish object at 0x000002769065B048>
<__main__.Fish object at 0x000002769065B048>
# 4.0 单例模式,让初始化的动作只执行一次

class Fish(object):
# 记录第一个被创建对象的引用
instance = None
init_flag = False def __new__(cls, *args, **kwargs):
# 判断雷属性是否是空对象
if cls.instance is None:
# 调用父类的方法,为第一个对象分配空间
cls.instance = super().__new__(cls) # 返回类属性保存的对象的引用
return cls.instance def __init__(self):
# 判断是否执行过初始化动作
if Fish.init_flag:
return # 若没执行过,则执行初始化动作
print("Fish 类初始化") # 修改雷属性的标记
Fish.init_flag = True f1 = Fish()
print(f1) f2 = Fish()
print(f2)

>>>

Fish 类初始化
<__main__.Fish object at 0x00000276906632E8>
<__main__.Fish object at 0x00000276906632E8>

2.3 _call_()

>>> class A(object):
... def __call__(self):
... print("this is __call__")
...
>>> a = A()
>>> a
<__main__.A object at 0x000001DFDF94E5C0>
>>> print(a)
<__main__.A object at 0x000001DFDF94E5C0>
>>>

2.4 _str_()

>>> class A(object):
... def __str__(self):
... return "this is __str__"
...
>>> a = A()
>>> a
<__main__.A object at 0x000001DFDF94EA58>
>>> print(a)
this is __str__
>>>

2.5 _repr_()

# 1.0

>>> class A(object):
... def __repr__(self):
... return "this is __repr__"
...
>>> a = A()
>>> a
this is __repr__
>>> print(a)
this is __repr__
>>>
# 2.0

>>> class A(object):
... def __str__(self):
... return "this is __str__"
... def __repr__(self):
... return "this is __repr__"
...
>>> a = A()
>>> a
this is __repr__
>>> print(a)
this is __str__
>>>

[Python3 填坑] 014 类的常用魔术方法举例的更多相关文章

  1. Python面向对象5:类的常用魔术方法

    魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发- 魔术方法的统一的特征,方法名被前后各两个下滑线包裹 - 操作类 - `__init__`: 构造函数 - `__new__`: 对象实例 ...

  2. [Python3 填坑] 001 格式化符号 & 格式化操作符的辅助指令

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 Python 格式化符号表 举例说明 (1) %c (2) %s 与 %d (3) %o (4) %x (5) %f (6) %e (7 ...

  3. [Python3 填坑] 006 “杠零”,空字符的使用

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 \0 是空字符,输出时看不到它,但它占 1 个字符的长度 2.2 \0 "遇八进制失效" 2.3 \0 与 '' 不 ...

  4. php中的常用魔术方法总结

    以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...

  5. python常用魔术方法概览

    构造和初始化 __init__(self, args) 构造函数 __new__(cls) 传入的是类实例 __del__(self) 析构函数,调用 del cls 时会被调用 属性访问控制 __g ...

  6. [Python3 填坑] 018 组装类的几个例子

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 MetaClass 举例 2.2 type 举例 2.3 MetaClass 举例 1. print( 坑的信息 ) 挖坑时间:2019 ...

  7. [Python3 填坑] 013 几个类相关函数的举例

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 issubclass() 2.2 isinstance() 2.3 hasattr() 2.4 getattr() 2.5 setatt ...

  8. [Python3 填坑] 009 深拷贝与浅拷贝

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 Python3.7 官方文档 2.2 赋值.切片与 copy() 分析 分析 分析 分析 2.3 copy 模块 分析 分析 2.4 小 ...

  9. [Python3 填坑] 004 关于八进制

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 问题的由来 2.2 问题的解决 2.2.1 先说结论 2.2.2 八进制的用途 2.2.3 少废话,上例子 1. print( 坑的信息 ...

随机推荐

  1. 13、前端知识点--ajax原理以及实现过程

    一.简略版的 Ajax简介 Ajax(Asyncchronous JavaScript and Xml),翻译过来就是说:异步的javaScript和xml, Ajax不是新的编程语言,而是一种使用现 ...

  2. JavaScript基础4——省市联动

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Express 2015 RC for Windows 10 安装

    支持的操作系统 Windows 10 Technical Preview 硬件要求 1.6 GHz 或更快的处理器 1 GB RAM(如果在虚拟机上运行,则为 1.5 GB) 4 GB 可用硬盘空间 ...

  4. CentOS7 systemctl 命令

    *启动.重启.停止.重载服务 # systemctl start httpd.service # systemctl restart httpd.service # systemctl stop ht ...

  5. 前端 js javascript

    新浪SAE公共资源 推荐指数★★★ 支持https http://lib.sinaapp.com/http://lib.sinaapp.com/js/jquery/2.0.3/jquery-2.0.3 ...

  6. win7提示不是正版桌面变黑

    1.以管理员身份运行cmd.exe 2.在该界面>后面输入SLMGR -REARM,大家注意下有个空格键 然后点击确定,重启电脑就OK了.

  7. 什么是shader?

    一.什么是shader? shader是一段GLSL(openGL着色语言)小程序,运行在GPU(图形处理器),而非CPU使用GLSL语言编写,看上去像c或c++,但却是另外一种不同的语言.使用sha ...

  8. Mongodb副本集实现及读写分离

    前言 地址:https://blog.csdn.net/majinggogogo/article/details/51586409 作者介绍了,mongodb副本集的读写原理,原理是通过代码层来实现. ...

  9. 2018-11-01-weekly

    Algorithm 107. 二叉树的层次遍历 II What 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历).例如:给定二叉树 [3,9 ...

  10. Windows结束某个端口的进程

    1.打开cmd命令窗口,输入命令:netstat -ano | findstr 8080,根据端口号查找对应的PID.结果如下: 发现8080端口被PID(进程号)为2188的进程占用. 2.根据PI ...