[转python 父类可以调用子类的方法
最近使用到了SocketServer.py 这个包,就顺便学习一下它的实现,在阅读的过程中,发现
BaseServer 中的 _handle_request_noblock()函数中 有一句
request, client_address = self.get_request()
而这个 get_request()方法是在继承于BaseServer的 TCPServer 和UDPServer 中实现的,
三个的关系的定义是:
class BaseServer:
class TCPServer(BaseServer):
class UDPServer(TCPServer):
2、疑问:
父类可以调用子类中的方法么?
还是说我对这里代码的理解有误?
希望明白的朋友给我解一下惑或者指引一下相关的资料,谢谢拉!
9 回复 | 直到 2014-08-02 00:06:58 +08:00
|
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 第二条附言不对吧,就算声明了这个方法,就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 |
(原文地址:https://www.v2ex.com/t/125569)
[转python 父类可以调用子类的方法的更多相关文章
- Java 中父类怎么调用子类的方法?
父类能调用子类的方法吗? 答:能. 怎么做? ● 把子类传递到父类的有参构造中,然后调用. ● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法. 案例展示: pack ...
- Java父类对象调用子类实体:方法重写与动态调用
众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢? 这里我先给一个例 ...
- Javascript:父类可以调用子类吗?
问:父类可以调用子类吗? 答:可以,经典的模板方法模式就是用的这个特性.
- Java 构造器 一道构造器调用子类重载方法的题目
构造器中不能new本类对象,否则进入死循环. 构造器没有返回值,也没有void修饰. 使用关键字super可以调用父类的构造器,而且这一句必须放在第一句的位置,否则无法编译. 题目: 请写出以下程序的 ...
- 拥有iframe页面的子父类窗口调用JS的方法,并且注意的事项
一.前言 我页面用的是EasyUI的弹出窗口里面嵌入一个iframe.第一:父窗口打开子窗口是一个新增用户信息的iframe子页面,点击保存后,子窗口iframe则去调用父窗口的function cl ...
- java this 子类调父类,父类再调用子类已覆盖的方法及属性(又一次理解)
之前一直以为 this关键字 是指调用者对象,但是这次才真正理解,this代表当前对象,但是指向调用者对象,其实就是多态的用法,如下所示:B 继承了 A,在B 中调用A类的方法,在A 中用this 访 ...
- java 集合 父类的使用子类的方法时候 底层自动转型为子类的数据类型
跟继承多态不一样 继承多态需要显示转型
- php 父类调用子类方法和成员
在C和C++里,父类都不允许调用子类的方法,但在php里可以.下面是一个调用的例子: <?php abstract class Animal { protected $name; public ...
- PHP面向对象-看父类调用子类方法
大部分面向对象编程语言中,父类是不允许调用子类的方法的,但是PHP中可以 1.父类调用子类方法示例 class A { public function testa() { $this->test ...
随机推荐
- Excel 帮助类
using System; using System.Collections.Generic; using System.Data; using System.Drawing; using Syste ...
- svn log操作
查看当前文件夹的最近N次提交记录 svn update; svn log --limit <N> -v 含义是:查询最近N次提交记录的详细信息,包括版本号,提交文件列表,log信息 对比某 ...
- Entity Framework 学习初级篇6--EntityClient
System.Data.EntityClient 命名空间是 实体框架的 .NET Framework 数据提供程序.EntityClient 提供程序使用存储特定的 ADO.NET 数据提供程序类和 ...
- 我也谈javascript闭包的原理理解
参考原文:http://www.oschina.net/question/28_41112 前言:还是一篇入门文章.Javascript中有几个非常重要的语言特性——对象.原型继承.闭包.其中闭包 对 ...
- 怎样让外界无法改变自定义view的尺寸大小
重写setFrame和setBounds方法即可. + (instancetype)testView { return [[self alloc] init]; } - (void)setFrame: ...
- gridview中button事件处理
http://msdn.microsoft.com/zh-cn/library/bb907626.aspx 再结合如下: protected void GridView1_RowCommand(obj ...
- PKI 笔记
PKI – Public Key Infrastructure , 通常翻译为公钥基础设施. PKI 安全平台提供的4个服务,来保证安全的数据,分别是: l 身份识别 l 数据保密 l 数据完整 ...
- Struts2升级出现的问题
由于大家都懂的原因,涉struts2的项目需要将struts2相关包升级至2.3.15.1.今将升级方法和常见问题解决简单总结如下. 一.基本升级操作 1. 获取Struts2.3.15.1jar包 ...
- mknod用法以及主次设备号【转】
转自:http://www.cnblogs.com/hnrainll/archive/2011/06/10/2077583.html mknod 用途 创建特殊文件. mknod Name { b | ...
- NVIDA 提到的 深度框架库
BidMachBlocksCaffeChainerCNTKcuda-convnetcuda-convnet2Deeplearning4jkaldiKerasLasagneMarvinMatConvNe ...