超级郁闷的一件事,理解python的类!



QUOTE:
原帖由 flw 于 2006-5-19 11:46 发表

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

Python 中,类对象只是对象的一种,
类对象支持两种操作:属性引用和实例化,类被实例化之后,产生类实例对象,这又是一种不同于类对象的新型对 ...

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


QUOTE:
原帖由 nemanman 于 2006-5-19 19:03 发表



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

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

C++ 就不同了,类是类型,变量/对象是实体,一个是抽象的,一个是具体的。
对初学者不要讲的太复杂了,其实不仅仅python,包括java,C++,C#几乎所有的面向对像语言都可以这样形容。类是一个图纸,而对象是按照这个图纸生产出来的产品。
长见识了,原来python还有这样的特性
实践才是真理,开始学的时候不懂也没有关系,不必让它阻挡你继续的脚步。学到一定程度,看的代码多了,写的代码多了,很多东西自然就明白了。
不同的语言里,对象的语义是不同的,而且面向对对象这个东西在物理实现上,编程语法上,和思维方式三个层面都有不同的意思。这是我个人第一点看法。不准确,可借鉴。学美术的学编程真的是很厉害啊,佩服,呵呵!
打个比方说吧, 男人, 女人, 老人, 小孩都是人, "人"就是一个抽象, 是一类物体的统称。计算机语言里的类, 就好比"人"这个抽象的概念, 而对象就好比某个具体的人。

换句话说, 类和对象是一种思维模型, 用这种模型写程序, 比较能反映真实世界的情形。但这只是思维模型的一种, 不是全部。

所以, 开始不懂类和对象, 完全没有关系。从简单的代码写起, 学会用函数, 写多了, 认识深刻了, 自然而然就会理解比较深的概念了。

另外, 就像上面帖子说的, 每种语言对类和对象的定义都有差别。单从思维模型这个角度来讲, 是基本一致的。

说到这里, 忽然想起了古代的一句话, 叫"白马非马", 呵呵.


QUOTE:
原帖由 flw 于 2006-5-19 11:46 发表

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

Python 中,类对象只是对象的一种,
类对象支持两种操作:属性引用和实例化,类被实例化之后,产生类实例对象,这又是一种不同于类对象的新型对 ...

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


QUOTE:
原帖由 flw 于 2006-5-19 19:33 发表

其实 C++ 中的对象相当于 Python 中的类实例对象,
而 Python 中的类也是对象,这一点和 C++ 有最大的区别,
C++ 的类是“类型”,没有实体(虽然静态成员变量有实体)。
C++ 中的类只能用来访问属性和实例化 ...

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



QUOTE:
原帖由 zengjin8310 于 2006-5-20 22:53 发表


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

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