免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wan8832
打印 上一主题 下一主题

超级郁闷的一件事,理解python的类! [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
1 [报告]
发表于 2006-05-19 11:46 |显示全部楼层
原帖由 chealim 于 2006-5-18 20:57 发表
类是一个抽象的概念,不占用实际物理内存;对象却实实际际的占用了内存
类包含对象,对象是类的子集;一个类可以产生许许多多的对象
类只是用来定义事物的,有方法、属性等等;所以它产生的对象同样有这些方法、 ...

严重错误!
在 C++ 中是这样,
但是在 Python 中恰恰相反。

Python 中,类对象只是对象的一种,
类对象支持两种操作:属性引用和实例化,类被实例化之后,产生类实例对象,这又是一种不同于类对象的新型对象。
也就是说,在 Python 中,类是对象的真子集,而对象却不是类的子集,而是真超集。

Python 中,“一切皆对象”,而类只是其中的一种对象。

如果你说“类是一个抽象的概念,不占用实际物理内存”,那么你又怎么解释这段代码呢?
  1. D:\MoChou>cat ttt.py
  2. class MyClass:
  3.     i = 7

  4. print MyClass.i
  5. MyClass.i = 9
  6. print MyClass.i

  7. D:\MoChou>ttt.py
  8. 7
  9. 9

  10. D:\MoChou>
复制代码

[ 本帖最后由 flw 于 2006-5-19 11:51 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2006-05-19 19:33 |显示全部楼层
原帖由 nemanman 于 2006-5-19 19:03 发表



谢谢,长见识了,怪不得学python时感觉类怪怪的,就好象c++中对象一样

其实 C++ 中的对象相当于 Python 中的类实例对象,
而 Python 中的类也是对象,这一点和 C++ 有最大的区别,
C++ 的类是“类型”,没有实体(虽然静态成员变量有实体)。
C++ 中的类只能用来访问属性和实例化,
Python 中的类除了能访问属性和实例化之外,还可以像普通的一个实体一样传来传去,比如赋值给另一个变量,再或者传递到函数里面去,等等。
通过重载运算符,甚至还能参与运算,从这个角度来讲,一个类和一个整型变量没有太大的区别。

C++ 就不同了,类是类型,变量/对象是实体,一个是抽象的,一个是具体的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2006-05-21 11:06 |显示全部楼层
原帖由 zengjin8310 于 2006-5-20 22:53 发表


C++的static类成员有区别么? C++的类你也可以这么理解

当然有区别,如果你懂的话。
这个道理的明显程度就好比“根”应该写作“跟”,如果你懂汉语的话。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2006-05-21 11:08 |显示全部楼层
原帖由 zengjin8310 于 2006-5-20 22:55 发表


你说的是类似于java的reflection机制, 这个在B教主的C++0x据说会支持. 其实python跟C++比的亮点关键是语言特性容易做FP,以及type inference机制带来的抽象统一能力以及动态能力

你就尽情地扯吧!
BBS 是一个自由言论的地方,所以你尽可以把你关于 C++ 和 Python 区别的观点发表在一个讨论 Python 类机制的帖子中去,没人能约束你,无论你说的对与错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP