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__
>>>

最新文章

  1. 与你相遇好幸运,Waterline的属性
  2. 一致性hash算法简介与代码实现
  3. nodejs-express 报错View is not a constructor
  4. 利用PPT的WebBroswer控件助力系统汇报演示
  5. IBatis.Net学习笔记七--日志处理
  6. CentOS 下安装python 之MySQLdb
  7. Echarts 数据视图 生成Excel的方法
  8. JVM调优:HotSpot JVM垃圾收集器
  9. Python复习笔记(三)函数进阶
  10. oracle中查询表是否存在
  11. Sql Server Compact 4.0数据库部署安装
  12. FineReport实现java报表权限使用的效果图
  13. 护眼:我的DIY电脑护眼妙招
  14. 【JS深入学习】—— 一句话解释闭包
  15. loj2542「PKUWC2018」随机游走
  16. Linux下U盘、SD卡挂载与卸载
  17. Python学习之字符串格式化
  18. 如何正确理解javascript的模块化的
  19. django-base
  20. npm使用淘宝镜像

热门文章

  1. js string相关方法
  2. vue.js 笔记
  3. django之静态文件的设置
  4. Python---基础---常用的内置模块
  5. rm 或者ls 报Argument list too long
  6. sublime text3 Package Control 插件安装及推荐(MAC)
  7. DGA域名检测
  8. CKeditor粘贴图片在IE下自动上传的研究
  9. 关于Reporting Services网站
  10. C# 修改注册表立即刷新 转载