熟悉了传统的 C++/Java 类定义的风格,来感受一下 Python 是如何定义类的。本篇是阅读 《The Quick Python Book》第二版关于类定义的笔记,由原书内容进一步引申,不过是依照本人的思考顺序来组织的。在理解 Python 类定义的同时头脑中应该闪现出 JavaScript/Java 如何定义类的情景。最简单的类定义
class MyClass:
由于
passclass MyClass后面要有个冒号,而冒号后总得有点东西才能表示该类定义结束了,于是放个pass当占位符。Python 也像 Java 一样,有一个根类,叫做 object,例如上面的定义1>>> MyClass.__bases__ 2(<class 'object'>,) 3>>> import inspect 4>>> inspect.getmro(MyClass) 5(<class '__main__.MyClass'>, <class 'object'>)
我们能看到它隐式的基类是object, 而不用显式的声明为class MyClass(object)。看到__bases__属性是一个 Tuple, 意识到 Python 是支持多重继承的。 Read More
Ruby 中有许多以 ? 和 !号结尾的方法,? 号方法返回布尔值用于判断的,如Array.empty?,可以想到三元操作符 a = b==1?1:2 。出现在方法名尾部的感叹号表明使用该方法是需要多加小心。许多Ruby的核心类都定义了成对的方法,它们具有同样的名称,只是结尾相差一个“!”,通常情况下,不带感叹号的方法返调用该方法的一个拷贝,带感叹号的方法则是一个可变方法,该方法会修改原来的对象,如 Array 类中的 sort 和 sort!。
Ruby 里对变量名有这么一个约定:全局变量加前缀 $,实例变量用前缀 @,类变量前缀用 @@。
Ruby 的类和模块,来实现一个 Ruby 的示例类,从中了解类的构造方法,块的实现、块内循环和调用以及符号的重载,看如下代码: Read More