鱼C论坛

 找回密码
 立即注册
查看: 717|回复: 11

[已解决]Python 关于 类 的问题

[复制链接]
发表于 2018-12-11 15:37:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 13572044595 于 2018-12-11 15:40 编辑

代码如下:
  1. class A():
  2.     def __init__(self):
  3.         print("进入A…")
  4.         print("离开A…")

  5. class B(A):
  6.     def __init__(self):
  7.         print("进入B…")
  8.         A.__init__(self)
  9.         print("离开B…")
  10.         
  11. class C(A):
  12.     def __init__(self):
  13.         print("进入C…")
  14.         A.__init__(self)
  15.         print("离开C…")

  16. class D(B, C):
  17.     def __init__(self):
  18.         print("进入D…")
  19.         B.__init__(self)
  20.         C.__init__(self)
  21.         print("离开D…")
复制代码

我输入 D()
运行结果:
  1. 进入D…
  2. 进入B…
  3. 进入A…
  4. 离开A…
  5. 离开B…
  6. 进入C…
  7. 进入A…
  8. 离开A…
  9. 离开C…
  10. 离开D…
  11. <__main__.D object at 0x000001924AFB9C18>
复制代码


--------------------------------------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------------------

如果代码里面末尾有 D():
  1. class A():
  2.     def __init__(self):
  3.         print("进入A…")
  4.         print("离开A…")

  5. class B(A):
  6.     def __init__(self):
  7.         print("进入B…")
  8.         A.__init__(self)
  9.         print("离开B…")
  10.         
  11. class C(A):
  12.     def __init__(self):
  13.         print("进入C…")
  14.         A.__init__(self)
  15.         print("离开C…")

  16. class D(B, C):
  17.     def __init__(self):
  18.         print("进入D…")
  19.         B.__init__(self)
  20.         C.__init__(self)
  21.         print("离开D…")
  22. D()
复制代码

运行结果:
  1. 进入D…
  2. 进入B…
  3. 进入A…
  4. 离开A…
  5. 离开B…
  6. 进入C…
  7. 进入A…
  8. 离开A…
  9. 离开C…
  10. 离开D…
复制代码


希望鱼油能告诉我为什么会这样?

<__main__.D object at 0x000001924AFB9C18>         这一行结果,什么意思?
最佳答案
2018-12-11 18:32:31
13572044595 发表于 2018-12-11 17:01
你刚才的回答不就是  
fun      返回函数地址
fun()   返回执行结果

那是编译器反馈你的信息。

参考:
https://blog.csdn.net/dreamhua927/article/details/52461816

便于你理解,可以IDLE,和代码文件各测试以下代码。看看有什么不同
  1. class A:
  2.     def __init__(self):
  3.         print("进入A…")
  4.         print("离开A…")

  5. class B(A):
  6.     def __init__(self):
  7.         print("进入B…")
  8.         A.__init__(self)
  9.         print("离开B…")
  10.         
  11. class C(A):
  12.     def __init__(self):
  13.         print("进入C…")
  14.         A.__init__(self)
  15.         print("离开C…")

  16. class D(B, C):
  17.     def __init__(self):
  18.         print("进入D…")
  19.         B.__init__(self)
  20.         C.__init__(self)
  21.         print("离开D…")

  22. d = D()
  23. d
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-11 15:48:51 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 heidern0612 于 2018-12-11 15:51 编辑

我大致知道是因为 D()没有返回值,所以程序显示的是个内存的位置。

你可以问问大神们的看法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 15:57:15 | 显示全部楼层

回帖奖励 +1 鱼币

简单给你说明下

一个函数
1、调用 名字 如: fun 是告诉你函数的地址在哪里。(函数体并没有执行)
2、加上() 如: fun()  是实实在在的调用函数执行。(执行了函数体)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-11 16:00:23 | 显示全部楼层
ba21 发表于 2018-12-11 15:57
简单给你说明下

一个函数


<__main__.D object at 0x000001924AFB9C18>
是函数地址?

程序里面 直接执行 fun()   和  手动输入 执行fun()   有区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-11 16:03:01 | 显示全部楼层
heidern0612 发表于 2018-12-11 15:48
我大致知道是因为 D()没有返回值,所以程序显示的是个内存的位置。

你可以问问大神们的看法。

D()   没有返回值?

__init__(self)      不是当对象被 实例化的时候  这个方法直接被调用了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 16:13:09 | 显示全部楼层

回帖奖励 +1 鱼币

D()是你在命令行没有赋值,运行返回给你的东西,表示这是<__main__.D object at 0x000001924AFB9C18>
此模块里定义的D类对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-11 16:28:59 | 显示全部楼层
塔利班 发表于 2018-12-11 16:13
D()是你在命令行没有赋值,运行返回给你的东西,表示这是
此模块里定义的D类对象

没太明白,先放这,以后再说,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 16:46:53 | 显示全部楼层
13572044595 发表于 2018-12-11 16:00
是函数地址?

程序里面 直接执行 fun()   和  手动输入 执行fun()   有区别?

你的回问,跟我的解答有半毛钱关系?
你是如何理解解答的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-11 17:01:12 | 显示全部楼层
ba21 发表于 2018-12-11 16:46
你的回问,跟我的解答有半毛钱关系?
你是如何理解解答的?

你刚才的回答不就是  
fun      返回函数地址
fun()   返回执行结果
不是吗? 这些我知道

所以才会问你
程序 本身 内部执行 fun()   和 手动 输入执行 fun(),
结果相同吗?这样的疑问~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 17:14:58 | 显示全部楼层

回帖奖励 +1 鱼币

13572044595 发表于 2018-12-11 17:01
你刚才的回答不就是  
fun      返回函数地址
fun()   返回执行结果

应该只是IDLE在告诉你这个类的地址而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-11 18:32:31 | 显示全部楼层    本楼为最佳答案   
13572044595 发表于 2018-12-11 17:01
你刚才的回答不就是  
fun      返回函数地址
fun()   返回执行结果

那是编译器反馈你的信息。

参考:
https://blog.csdn.net/dreamhua927/article/details/52461816

便于你理解,可以IDLE,和代码文件各测试以下代码。看看有什么不同
  1. class A:
  2.     def __init__(self):
  3.         print("进入A…")
  4.         print("离开A…")

  5. class B(A):
  6.     def __init__(self):
  7.         print("进入B…")
  8.         A.__init__(self)
  9.         print("离开B…")
  10.         
  11. class C(A):
  12.     def __init__(self):
  13.         print("进入C…")
  14.         A.__init__(self)
  15.         print("离开C…")

  16. class D(B, C):
  17.     def __init__(self):
  18.         print("进入D…")
  19.         B.__init__(self)
  20.         C.__init__(self)
  21.         print("离开D…")

  22. d = D()
  23. d
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-19 21:16:35 | 显示全部楼层

回帖奖励 +1 鱼币

学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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