day29 类中的内置函数方法 __str__ __repr__ __call__ isinstance() issubclass()
__str__()
__repr__()
__len__() str() 转字符串
repr() 让字符原形毕露的方法
len() 计算长度
内置的方法很多,但是并不是全部都在object中,比如len(),__len__(),比如说数字,时间,还有对象都是无法计算长度
# __del__ 析构函数
# 删除,python解释器本身也会自动删除
class A:
def __del__(self):
print("执行我啦")
a = A()
# del a # 这里不些括号也行
del(a) # 即删除了变量,又执行了这个方法,先执行后删除
# 执行我啦
print(a) # NameError: name 'a' is not defined
__call__() 调用的本质
__str__() 把一个类的示例变成字符串输出(其实是为了输出给客户看的.更加的容易清晰的理解这个实例是个啥)
class ABC():
def __init__(self,name):
self.name = name def aaa(self):
print(f"{self.name} is aaa")
return "aaa" def __call__(self, *args, **kwargs):
print("it's working~~") def __str__(self):
print("这是一个ABC的实例") # __str__返回值必须要有. 不然会报错.
# TypeError: __str__ returned non-string (type NoneType)
return "这是一个ABC的实例" a = ABC("yangtuo") # 实例化 # 直接对实例操作实际是操作的就是__call__()方法
a() # it's working~~ # 在没有__call__方法的时候直接打印这个实例会返回一段内存地址
# print(a) # <__main__.ABC object at 0x000000000258D240>
# 存在__call__方法的时候返回不会这么死板
print(a) # 这是一个ABC的实例 a.aaa() # yangtuo is aaa
print(a.name) # yangtuo
内置函数类方法和内置的函数方法其实有很深的联系 简单来说就是: 开发者看 repr 客户看 str
为了保证一致性可以用只重写__str__()并设置__repr__ = __str__,就可以保证上面使用方法的结果都是调用重写的__str__()。
>>> class Test():
def __init__(self):
self.prompt = "hello,zss041962" >>> t = Test()
>>> t
<__main__.Test object at 0x0000000002F3EF28>
>>> print(t)
<__main__.Test object at 0x0000000002F3EF28> # 看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
# 下面我们重构下该类的__repr__以及__str__,看看它们俩有啥区别 >>> #重构__repr__
>>> class TestRepr(Test):
def __repr__(self):
return "Show:%s"%self.prompt
# 重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了
>>> t1 = TestRepr()
>>> t1
Show:hello,zss041962
>>> print(t1)
Show:hello,zss041962 >>> #重构__str__
>>> class TestStr(Test):
def __str__(self):
return "Show: %s"%self.prompt
# 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了
>>> t2 = TestStr()
>>> t2
<__main__.TestStr object at 0x00000000031C33C8>
>>> print(t2)
Show: hello,zss041962
isinstance 检查一个对象是不是一个类的对象
issubclass 检查一个一个类是不是另一个类的子类
# isinstance 检查一个对象是不是一个类的对象
# isinstance(obj,cls)
class A():pass
a = A()
print(isinstance(a,A)) # True # issubclass 检查一个一个类是不是另一个类的子类
# issubclass(sub,super)
class A():pass
class B(A):pass
print(issubclass(B,A)) # True
# 这个顺序有点难记忆, B是不是A 的子类?是就返回 T 不是返回 F
# 被检查是否是子类的放在前面
# 被检查是否是父类的放在后面
day29 类中的内置函数方法 __str__ __repr__ __call__ isinstance() issubclass()的更多相关文章
- python类中的内置函数
__init__():__init__方法在类的一个对象被建立时,马上运行.这个方法可以用来对你的对象做一些你希望的初始化.注意,这个名称的开始和结尾都是双下划线.代码例子: #!/usr/bin/p ...
- Kettle中JavaScript内置函数说明
本文链接:https://blog.csdn.net/u010192145/article/details/102220563 我们在使用JavaScript组件的时候,在左侧核心树对象栏中可以看到K ...
- 洗礼灵魂,修炼python(36)--面向对象编程(6)—类的相关内置函数issubclass,hasattr等
啥?我靠,类也有内置函数?哈哈,确实有的.有哪些呢?请往下看 issubclass(cls, class_or_tuple, /) 1.基本属性: 方法全是特殊方法 2.使用方法:判断一个类是否由另一 ...
- Day07:常用模块,面向对象编程(对象&类)及内置函数
今日内容:1.常用模块2.面向对象编程(*****) 介绍面向对象编程 类 对象3.内置函数------------------------------1.面向过程编程 核心“ ...
- oop(面向对象)中的内置函数
oop中的内置函数 类中存在一些名字带有双下划线__开头的内置函数, 这些函数会在某些时候被自动调用,例如之前学习的迭代器__init__函数 一.isinstance(obj, cls) 检查o ...
- python 类(object)的内置函数
python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...
- Oracle中的内置函数在sql中的转换整理
程序里面经常会即支持Oracle数据库,又支持sql数据库.而有些Oracle内置函数用的比较多,但在sql中语法有些不同,我做了些整理,希望可以帮助大家.... 1.oracle中的内置函数:ora ...
- 正确停止线程的方式三 使用Thread类中的内置的中断标记位-----------不熟悉
package charpter10; public class Processor implements Runnable { @Override public void run() { for ( ...
- 转】SparkSQL中的内置函数
原博文来自于: http://blog.csdn.net/u012297062/article/details/52207934 感谢! 使用Spark SQL中的内置函数对数据进行分析,Spa ...
随机推荐
- Python基础语法复习
1.数据类型 List 列表 函数 append(): 在列表末尾追加. count(): 计算对象在列表中出现的次数. extend():将列表内容添加到列表中. index(): 计算对象在列表中 ...
- CentOS7.2调整Mysql数据库最大连接数
mysql数据库最大连接数=max_connections+11:root连接,用于管理员连接数据库进行维护操作查看最大连接数:show variables like 'max_connections ...
- LiveCharts文档-3开始-1安装
原文:LiveCharts文档-3开始-1安装 LiveCharts文档-3开始-1安装 我不会逐字逐句翻译,有些过于基本的地方语言上会所略 三个平台我只翻译WinForm,其他的WPF和UWP大部分 ...
- odoo 11 实现多个字段对应一个查询参数的查询
在整理英语单词开发模块的过程中,有这样一个需求,就是我在查询界面里输入一个查询的值A,这个A可能是下面的任何一个值 1.一个英语单词 2.汉语文字 3.一个英语单词的部分 这里有两张表:engli ...
- C# 深浅复制 MemberwiseClone
学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 最近拜读了大话设计模式:原型模式,该模式主要应用C# 深浅复制来实现的!关于深浅复制大家可参考 ...
- HBase最佳实践-管好你的操作系统
本文由 网易云发布. 作者:范欣欣 本篇文章仅限本站分享,如需转载,请联系网易获取授权. 操作系统这个话题其实很早就想拿出来和大家分享,拖到现在一方面是因为对其中各种理论理解并不十分透彻,怕讲不好: ...
- YY:2018互联网创业公司应看清的事情
潮流,技术,生活方式,盈利模式,消费人群几乎每年都在改变,2018,你看到的是怎样的一盘棋. 2018年是个很好的数字,很多互联网公司寄予希望在这个幸运数字年头奋起一搏,拿到一份可观的酬金.特别是一些 ...
- PMO在组织中实现价值应做的工作
PMO在组织中实现价值应做的工作 研发人员及项目经理常常对PMO有反感情绪,认为其不熟悉业务流程与技术.经常要求项目经理和研发人员提交形式化的材料,只审批和监控,不能为项目提供良好的服务.在很多企业, ...
- sql 某字段存储另一个表的多个id值并以逗号分隔,现根据id去中文并拼接同样以逗号分隔
首先介绍用到的两个函数 charindex(要查找的表达式1,表达式2),返回值为表达式1在表达式2中的下标,未找到则返回0.(sql的下标是从1开始的),例如 select charindex('s ...
- Docker网络解决方案 - Calico部署记录
简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...