鱼C论坛

 找回密码
 立即注册
查看: 1965|回复: 2

[已解决]python 工厂函数 返回 问题

[复制链接]
发表于 2017-7-11 16:43:18 | 显示全部楼层 |阅读模式
100鱼币
我的认识:python中 工厂函数比如float,str等都是工厂函数,其本质也是类。在实际操作中如float(10),返回的是10.0,就像普通函数return一样。那么问题来了,1、凭什么实例化float(即float(10))能返回一个对象,它调用了什么魔法方法吗??             2、假设我定义一个类(比如C),然后实例化(c=C()),如何在shell中 输入 c 回车,跳出的不是c的类型信息,而是让它返回一个对象(如"123",123,一个函数等)


打个比方,在requests中,r返回的就是一个类
>>> r = requests.get('https://github.com/timeline.json')
>>> r
<Response [410]>
最佳答案
2017-7-11 16:43:19
本帖最后由 ooxx7788 于 2017-7-11 17:18 编辑

这返回的并不是类啊,这是statue code.
至于你想返回什么信息,应该设置的是__repr__和__str__魔法方法。

  1. >>> import requests
  2. >>> r  = requests.get(r'http://www.baidu.com')
  3. >>> type(r)
  4. <class 'requests.models.Response'>
  5. >>> r
  6. <Response [200]>
  7. >>> r.status_code
  8. 200
  9. >>> r.__repr__()
  10. '<Response [200]>'
  11. >>> r.__str__()
  12. '<Response [200]>'
  13. >>> class A:
  14.         def __repr__(self):
  15.                 return 'FishC'

  16.        
  17. >>> a = A()
  18. >>> a
  19. FishC
  20. >>> class B:
  21.         pass

  22. >>> b=B()
  23. >>> b
  24. <__main__.B object at 0x0000001DD6015BE0>  # 如果不设置__repr__,默认就是返回类对象的名字,加一个内存地址
  25. >>> class C:
  26.         def __init__(self,var):
  27.                 self.var = var
  28.         def __repr__(self):
  29.                 return str(self.var)
  30.         def __str__(self):
  31.                 return str(self.var) +'我是标记'

  32.        
  33. >>> c = C(123)
  34. >>> c
  35. 123
  36. >>> print(c)
  37. 123我是标记
复制代码

最佳答案

查看完整内容

这返回的并不是类啊,这是statue code. 至于你想返回什么信息,应该设置的是__repr__和__str__魔法方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-11 16:43:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ooxx7788 于 2017-7-11 17:18 编辑

这返回的并不是类啊,这是statue code.
至于你想返回什么信息,应该设置的是__repr__和__str__魔法方法。

  1. >>> import requests
  2. >>> r  = requests.get(r'http://www.baidu.com')
  3. >>> type(r)
  4. <class 'requests.models.Response'>
  5. >>> r
  6. <Response [200]>
  7. >>> r.status_code
  8. 200
  9. >>> r.__repr__()
  10. '<Response [200]>'
  11. >>> r.__str__()
  12. '<Response [200]>'
  13. >>> class A:
  14.         def __repr__(self):
  15.                 return 'FishC'

  16.        
  17. >>> a = A()
  18. >>> a
  19. FishC
  20. >>> class B:
  21.         pass

  22. >>> b=B()
  23. >>> b
  24. <__main__.B object at 0x0000001DD6015BE0>  # 如果不设置__repr__,默认就是返回类对象的名字,加一个内存地址
  25. >>> class C:
  26.         def __init__(self,var):
  27.                 self.var = var
  28.         def __repr__(self):
  29.                 return str(self.var)
  30.         def __str__(self):
  31.                 return str(self.var) +'我是标记'

  32.        
  33. >>> c = C(123)
  34. >>> c
  35. 123
  36. >>> print(c)
  37. 123我是标记
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-11 19:28:19 | 显示全部楼层
ooxx7788 发表于 2017-7-11 16:43
这返回的并不是类啊,这是statue code.
至于你想返回什么信息,应该设置的是__repr__和__str__魔法方法。
...

感谢。看了requests的源码,用的是__repr__的魔法方法。强烈要求小甲鱼老师开个拆轮子的课程以提高我们的编程思路和体系··@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 22:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表