Python中的继承和override(由类的实例获取类的字符串信息)
来源:互联网 发布:postgresql 数组查询 编辑:程序博客网 时间:2024/05/16 05:25
今天花了些时间将Python中的继承知识,敲了些代码来加深理解。下面是整个程序
<span style="font-size:18px;">class Animal(object):"""Inherit and override function."""def __init__(self,name , weight, height):self.name = nameself.weight = weightself.height = heightdef __str__(self):return '%s height : %g , weight : %g' %(self.name, self.weight, self.height)def eat(self):print 'Animal eat function.'def sleep(self):print 'Animal sleep function.'class dog(Animal):"""subclass dog."""def __init__(self, name, weight, height, legs):Animal.__init__(self, name, weight, height)self.legs = legsdef __str__(self):#return '%s has height : %g , weight : %g and legs :%g.' %(self.name, self.height, self.weight, self.legs)return Animal.__str__(self)+ ",legs: %g." % self.legsdef lovedfood(self):return 'I love eatting noodles.'def fdc(obj, meth_name):"""find_defining_class."""for ty in type(obj).mro():if meth_name in ty.__dict__:return (obj.__class__.__name__)+'.'+ meth_name + '() ---> class '+ty.__name__+'.\n'def main():dg = dog("button", 5, 0.5,4)print dgprint dg.lovedfood()print fdc(dg, 'eat')print fdc(dg, 'lovedfood')if __name__ == '__main__':main()</span>这其中主要是父类Animal和子类dog。父类的结构如图,包含一个初始化函数,一个打印对象内容的__str__以及eat()和sleep()函数,变量主要有三个:name,weight和height。
子类的结构如下图所示:
它重写了父类的初始化函数和打印函数,增加了一个成员变量legs,同时还额外加入了一个lovedfood( )方法。
外部函数有测试用到的main( )和检查调用函数的fdc( )它的作用是检测调用的函数到底是属于子类的还是父类的。
<span style="font-size:14px;">def fdc(obj, meth_name):"""find_defining_class."""for ty in type(obj).mro():if meth_name in ty.__dict__:return (obj.__class__.__name__)+'.'+ meth_name + '() ---> class '+ty.__name__+'.\n'</span>
最后的main( )函数以及它的调试输出是:
def main():dg = dog("button", 5, 0.5,4)print dgprint dg.lovedfood()print fdc(dg, 'eat')print fdc(dg, 'lovedfood')
- 一开始想的是str(obj),没有打印出来。
- 使用内置函数repr(),其缩写是return a printable representation,返回一个可打印的形式。
- 还有就是外部模块pickle.dumps( )和pickle.loads( )函数,有些复杂。
最后我想dg既然是dog的一个实例化对象,而dog又是从Animal继承而来,应该会有记录相关的类的信息。因此,我就利用dir( )查看了关于它的信息
最后确认了dg.__class__.__name__就是我们所需要的信息。至此,就可以打印出正确的信息了。
0 0
- Python中的继承和override(由类的实例获取类的字符串信息)
- python类的继承和多态,获取对象信息
- Python对象 继承 多态 获取对象信息 类的属性
- Python面向对象编程(类和实例 访问限制 继承和多态 获取对象信息 实例属性和类属性)
- 关于virtual和override的在类继承中的调用关系
- 继承类和base,override,virtual 的…
- Python 类的定义和实例化,类继承
- Lua 类的继承与函数override
- 关于继承和覆盖(Override)的一些基础知识
- 关于继承和覆盖(Override)的一些基础知识
- Python中的类和继承
- C#中Abstract 、Virtual和Override的使用,类的继承
- javascript 类的继承和实例化
- 继承和派生(储存班长信息的学生类)
- 二、类的继承、public、protected、private、parent、重写override、最终类和最终方法
- 【python】获取对象的类型和信息
- 实例讲解override和new的区别
- 类为何要继承,要Override的比喻
- html页面中如何设置当光标移到一个固定区域时其形状变成手型,移出时恢复
- Android 真机调试 手机驱动
- 算法导论第15章 动态规划-矩阵链乘法
- Quick-Cocos2d-x 3.2将对象(包括子对象)变灰的方法
- 【BZOJ1806】【IOI2007】Miners 矿工配餐 动态规划
- Python中的继承和override(由类的实例获取类的字符串信息)
- Linux 搭建VPN,PPTPD一键安装脚本
- 【翻译原创】(二)MonkeyTalk 语言参考说明
- Exception in thread "main" java.lang.NoSuchFieldError的 一种解决办法
- Ubuntu 14.04(64位)配置Android开发环境
- duilib CDateTimeUI 在Xp下的bug修复
- SSH action返回Json错误 404
- 事件监听机制——列出指定目录内容、添加Dialog对话框
- iOS获取基于ASIHTTP的上传数据的变化方法