[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( 坑的信息 ...
随机推荐
- 帝国CMS 列表内容模板[!--empirenews.listtemp--]改写为灵动标签[e:loop={}]
需求描述: 1.将专题列表下的列表单元,自动根据专题页标题或者页面关键词来匹配展示: 2.第一个精确匹配,后面十一个模糊匹配,总数12个: 正文模板中,引入部分为: [!--empirenews.li ...
- passwd - 密码文件
描述 Passwd 是个文本文件, 它包含了一个系统帐户列表, 给出每个帐户一些有用的信息,比如用户 ID,组 ID, 家目录, shell,等. 通常它也包含了每个用户经过加密的密码. 它通常应该是 ...
- 三、Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流
一.环境 1.开发环境:windows 2.开发工具:FFmpeg.nginx.nginx-rmtp-module (链接:https://pan.baidu.com/s/119d2GeMzddas_ ...
- TCP窗口
一.窗口移动1.在建立TCP连接时,接收端会告诉发送端自己的接收窗口.2.发送端在发送数据时,会先为数据分包,编号,然后先发送窗口大小的数据(数据大于窗口大小),小于则全部发送了,窗口后的不允许发送. ...
- Swagger详解(SpringBoot+Swagger集成)(转)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ai_miracle/article/de ...
- error: must use ‘class’ tag to refer to type ‘XXX’ in this scope
开发环境: Qt Creator 4.8.2 在写程序的时候,遇到了编译器报错 error: must use 'class' tag to refer to type 'XXX' in this s ...
- join优化
1.left outer join先执行连接操作,再将结果通过WHERE语句进行过滤 select s.ymd,s.symbol,s.price_close,d.dividend from stock ...
- flask之数据库的交互
一:关系型数据库 mysql Flask-SQLAlchemy管理关系型数据库. mysql数据库引擎:url : mysql://username:passowrd@hostname/databas ...
- php count_chars()函数 语法
php count_chars()函数 语法 作用:返回一个字符串,包含所有在字符串中使用过的不同字符.直线电机选型 语法:count_chars(string,mode) 参数: 参数 描述 str ...
- char* 和 cha[]
char* s1 = "hello";//字符串常量 s是一个保存了字符串首地址的指针变量,同时也是字符串的名字,s的内容是第一个字符的地址,当s指向常量字符串时候,内容不能改变( ...