工作需要快速适应 oo 编程,怎样快速适应 oo?用 python 合适吗?

个人建议任何初学python的人先看看这个Python最佳实践指南!

亚马逊上买了一本 Head First 设计模式

而且发现 github 上有把这本书的例子用 python 实现的!

虽然不全而且原作者已经弃坑了,但是我打算把它拾起来,有兴趣的同学可以一起来学习,欢迎 PR!

OO 的话 Java 更适合些,这些书看一遍,肯定就适应 OO 了!

开个玩笑,这些书我大多都没看完。 :slight_smile:

建议学java。 java的面向对象机制和c++基本一脉相承的。不过c++里面c的包袱太重,可能有些代码写的还是过程式的。

python你既然熟悉应该也能和c++的oo机制类比。 java和c++里面的基类和子类关系符合一般的定义,基类对象在的地方能用子类对象替代。子类对象内部有基类对象的实例部分。其继承也是熟知的规则,封装实现有private protect public等机制。多态的话通过子类覆盖基类的方法,进行动态绑定。

python的oo机制,即继承和多态,实际上靠的是python的动态性和对象字段的查找过程,生成子类对象时直接赋值所有对应的字段和函数。子类里可以有对应基类的字段和方法,也可以没有,完全看代码里怎么写的。python里面没有所谓的访问控制private和protect,__字段也是通过命名重写来防止一般的访问,实际上都是可以访问的。

所有你可以用python来学oo,也可以进行oo风格的编程。但我觉得这种面向对象有点蹩脚的实现java和c++的面向对象机制,思想上接近,但底层的机制大不相同。或者可以尝试下java来对比下c++,更干净。

OOP 没有所谓的正统,更没有不能和过程式/函数式结合的说法。

Object-oriented programming does not have an exclusive claim to all these good properties. Systems may be modeled by other paradigms, including ones based on traditional notions of algorithms and data structures, which were not well developed when Simula was invented [57].

     ——A Theory of Objects

李慕白用一根竹子打赢了玉娇龙的青龙剑

1 个赞

其实注意一下 封装组合、继承 就行了,至于通过语言学习OO很容易陷入语法、库、框架的陷阱去。

Python is fine. The only thing is it doesn’t support private properties. In this sense, Ruby is more object oriented than Python but the syntax is similar.

大部分OOP的语言都受smalltalk影响.然而Java那语言简直都繁琐的要死,纯OOP编程就是作死.类,对象,再加一堆设计模式,就是看着代码完美,功能实现起来或者代码分析起来累的要死. python不是纯OOP,不过出结果的成本很低.这样高效的编程才有实际意义.

总之,没必要吊死在OOP上,什么能高效完成任务什么就是好的.

2 个赞

smalltalk非常优秀,相见恨晚!

这话有道理,那么是不是现在已经没有必要学设计模式了呢?

初步理解一下某些常用模式的基本思想就够了, python里很少用到设计模式,用到了再看也不迟.