博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day29 类中的内置函数方法 __str__ __repr__ __call__ isinstance() issubclass()
阅读量:6419 次
发布时间:2019-06-23

本文共 2752 字,大约阅读时间需要 9 分钟。

__str__() __repr__() __len__() str()     转字符串 repr()   让字符原形毕露的方法 len()     计算长度
内置的方法很多,但是并不是全部都在object中,比如len(),__len__(),比如说数字,时间,还有对象都是无法计算长度
1 # __del__         析构函数 2 # 删除,python解释器本身也会自动删除 3 class A: 4     def __del__(self): 5         print("执行我啦") 6 a = A() 7 # del a        # 这里不些括号也行 8 del(a)        # 即删除了变量,又执行了这个方法,先执行后删除 9             # 执行我啦10 print(a)    # NameError: name 'a' is not defined
__call__()  调用的本质 __str__()   把一个类的示例变成字符串输出(其实是为了输出给客户看的.更加的容易清晰的理解这个实例是个啥)
1 class ABC(): 2     def __init__(self,name): 3         self.name = name 4      5     def aaa(self): 6         print(f"{self.name} is aaa") 7         return "aaa" 8      9     def __call__(self, *args, **kwargs):10         print("it's working~~")11         12     def __str__(self):13         print("这是一个ABC的实例")        # __str__返回值必须要有. 不然会报错.14         # TypeError: __str__ returned non-string (type NoneType)15         return "这是一个ABC的实例"  16 17 a = ABC("yangtuo")        # 实例化18 19 # 直接对实例操作实际是操作的就是__call__()方法20 a()                       # it's working~~21 22 # 在没有__call__方法的时候直接打印这个实例会返回一段内存地址23 # print(a)                # <__main__.ABC object at 0x000000000258D240>24 # 存在__call__方法的时候返回不会这么死板25 print(a)                  # 这是一个ABC的实例26 27 a.aaa()                   # yangtuo is aaa28 print(a.name)             # yangtuo
内置函数类方法和内置的函数方法其实有很深的联系 简单来说就是: 开发者看 repr 客户看 str 为了保证一致性可以用只重写__str__()并设置__repr__ = __str__,就可以保证上面使用方法的结果都是调用重写的__str__()。
1 >>> class Test(): 2     def __init__(self): 3         self.prompt = "hello,zss041962" 4  5 >>> t = Test() 6 >>> t 7 <__main__.Test object at 0x0000000002F3EF28> 8 >>> print(t) 9 <__main__.Test object at 0x0000000002F3EF28>10 11 # 看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址12 # 下面我们重构下该类的__repr__以及__str__,看看它们俩有啥区别13 14 >>> #重构__repr__15 >>> class TestRepr(Test):16     def __repr__(self):17         return "Show:%s"%self.prompt18 # 重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了19 >>> t1 = TestRepr()20 >>> t121 Show:hello,zss04196222 >>> print(t1)23 Show:hello,zss04196224 25 26 >>> #重构__str__27 >>> class TestStr(Test):28     def __str__(self):29         return "Show:  %s"%self.prompt30 # 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了31 >>> t2 = TestStr()32 >>> t233 <__main__.TestStr object at 0x00000000031C33C8>34 >>> print(t2)35 Show:  hello,zss041962
isinstance 检查一个对象是不是一个类的对象 issubclass 检查一个一个类是不是另一个类的子类
1 # isinstance 检查一个对象是不是一个类的对象 2 # isinstance(obj,cls) 3 class A():pass 4 a = A() 5 print(isinstance(a,A))    # True 6  7  8 # issubclass 检查一个一个类是不是另一个类的子类 9 # issubclass(sub,super)10 class A():pass11 class B(A):pass12 print(issubclass(B,A))    # True13 # 这个顺序有点难记忆, B是不是A 的子类?是就返回 T 不是返回 F 14 # 被检查是否是子类的放在前面15 # 被检查是否是父类的放在后面

 

 

 

转载于:https://www.cnblogs.com/shijieli/p/9935395.html

你可能感兴趣的文章
如何获取最新的代码?
查看>>
X上面有一道横线,怎么打出来?
查看>>
gitlab服务部署及使用
查看>>
NPOI将数据导出到Excel中
查看>>
c#基本函数
查看>>
跟我一起学XNA(1)让物体动起来①(附源码)
查看>>
There is no accident
查看>>
springboot初学---rabbitmq的使用
查看>>
QTreeWidgetItem和QTreeWidgetItemIterator
查看>>
DevOps
查看>>
vim的纵向编辑(高级用法)
查看>>
再见,OI
查看>>
延时并自动关闭MessageBox
查看>>
指针转换(数组退化为指针的三种情况)
查看>>
C# Reflection exception Method not found
查看>>
Java面试笔记整理4
查看>>
什么是REST架构(转)
查看>>
搭建 Android 开发环境,初试HelloWorld (win7) (下) (转)
查看>>
混合高斯模型(GMM)推导及实现
查看>>
cocos2d-js 3.0rc0加载游戏引擎时长时间黑屏
查看>>