1
clino 2014-08-01 11:00:18 +08:00 1
不用从"父类可以调用子类中的方法"这种角度去看,而从对象生成以后的执行调用这个角度去看就行了,对象调用的时候 self.get_request() 就是调用自己这个对象里的 get_request() 方法啊,那这个方法具体是哪个,是由对象是从哪个类产生决定的
|
2
datou552211 2014-08-01 11:04:57 +08:00 1
这里的self不是指BaseServer或者它的实例。
|
4
julyclyde 2014-08-01 16:40:17 +08:00
无所谓啊反正是执行的时候才执行的,而不是编译期
|
5
x10ng 2014-08-01 16:48:30 +08:00
动态类型就是这样子,只要运行期的对象有该方法就可以。
|
6
maemual 2014-08-01 17:05:53 +08:00 1
第二条附言不对吧,就算声明了这个方法,就pass一下,也不会报错啊。
都说了python是动态类型,只需要在运行时有这个方法,也就是继承的TCPServer、UDPServer有这个方法的正确实现就行了。 这里的设计是不是不好的问题,确实不怎么好说。在我的理解,这里的BaseServer不是用来给用户使用的,Python的文档里也没有提到这个东西,所以默认他写这个基类是给自己方便下面实现TCPServer和UDPServer用的。所以只要他自己去实现对应的方法就行了。 同样,在Tornado 4.0的源码里,有很多地方的基类,比如tcpserver.py里214行声明了handle_stream,在255行调用了,但是只是简单的raise NotImplementedError()。本人是觉得Tornado的这种方式更加好一些。 |
7
kamushin 2014-08-01 17:14:48 +08:00
@maemual 同意这位。在看Tornado代码的时候我也发现了这种raise NotImplementedError()的做法,我觉得这样会比较好。
|
8
shyrock 2014-08-01 18:04:58 +08:00
声明同名空方法的方式更符合静态语言的思想。
从代码的可读性来说,这个方法对习惯静态语言的开发者更友好。 |
9
incompatible 2014-08-02 00:06:58 +08:00
|