[Python3 填坑] 014 类的常用魔术方法举例
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 类的常用魔术方法举例的更多相关文章
- Python面向对象5:类的常用魔术方法
魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发- 魔术方法的统一的特征,方法名被前后各两个下滑线包裹 - 操作类 - `__init__`: 构造函数 - `__new__`: 对象实例 ...
- [Python3 填坑] 001 格式化符号 & 格式化操作符的辅助指令
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 Python 格式化符号表 举例说明 (1) %c (2) %s 与 %d (3) %o (4) %x (5) %f (6) %e (7 ...
- [Python3 填坑] 006 “杠零”,空字符的使用
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 \0 是空字符,输出时看不到它,但它占 1 个字符的长度 2.2 \0 "遇八进制失效" 2.3 \0 与 '' 不 ...
- php中的常用魔术方法总结
以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...
- python常用魔术方法概览
构造和初始化 __init__(self, args) 构造函数 __new__(cls) 传入的是类实例 __del__(self) 析构函数,调用 del cls 时会被调用 属性访问控制 __g ...
- [Python3 填坑] 018 组装类的几个例子
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 MetaClass 举例 2.2 type 举例 2.3 MetaClass 举例 1. print( 坑的信息 ) 挖坑时间:2019 ...
- [Python3 填坑] 013 几个类相关函数的举例
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 issubclass() 2.2 isinstance() 2.3 hasattr() 2.4 getattr() 2.5 setatt ...
- [Python3 填坑] 009 深拷贝与浅拷贝
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 Python3.7 官方文档 2.2 赋值.切片与 copy() 分析 分析 分析 分析 2.3 copy 模块 分析 分析 2.4 小 ...
- [Python3 填坑] 004 关于八进制
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 问题的由来 2.2 问题的解决 2.2.1 先说结论 2.2.2 八进制的用途 2.2.3 少废话,上例子 1. print( 坑的信息 ...
随机推荐
- win32 socket编程(二)——TCP/IP
一.大端.小端法定义 1.1小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端. (主机字节顺序) 1.2 大端法(Big-Endian ...
- window.onload和document.ready的区别
window.onload和document.ready虽然两个方法的运行效果都一样,但他们之间是存在着区别的: 一.从执行的时间 window.onload在dom文档结构加载完毕以后就可以执行,不 ...
- 解决 vue-cli构建项目自动打开浏览器问题
1.打开项目下的config/index.js 2.找到module.exports的 dev下的 autoOpenBrowser ,将 false 改成 true 3.控制台输入:npm run d ...
- vue.js(19)--vue中子组件调用父组件的方法
子组件是不能直接使用父组件中的方法的,需要进行事件绑定(v-on:自定义方法名="父组件方法名"),然后在子组件中再定义一个方法,使用this.$emit('自定义方法名')语句完 ...
- [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作
第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索 ...
- load 和 initialize 的区别
官方文档 Apple的官方文档很清楚地说明了 initialize 和 load 的区别在于: load 是只要类所在文件被引用就会被调用,而 initialize 是在类或者其子类的第一个方法被调用 ...
- linux设定 runlevel 3
runlevel 查看当前系统运行级别 vi /etc/inittab //运行级别配置文件
- ps:新建Photoshop图像
从现在起我们开始正式地接触Photoshop,为了保证大家的快捷键设置与教程内容一致.请确认Photoshop的快捷键设置是默认值.可从菜单[编辑 键盘快捷键]打开快捷键设置,在组选项里面选择“Pho ...
- Final修饰的字段是否可以通过反射设置值
案发现场 经常听说final修饰的字段是常量不能改变的他的值,但是以外发现 Integer.java源码中的字段“value”是final,但是可以通过反射改变他的值. public final cl ...
- 【串线篇】spring boot对静态资源的映射规则
WebMvcAutoConfiguration的内部类 WebMvcAutoConfigurationAdapter 其中ResourceProperties点进去 其中addResourceHand ...