python 类定义 继承
0 前言
系统:win7 64bit
IDE : python(x,y) 2.7.6.1
IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
1 单继承
1.1 定义一个时间类,带默认参数
class mytime(object):
def __init__(self,hour=21, \
minute=13, \
second=50):
self.hour = hour
self.minute = minute
self.second = second def __str__(self):
return '__str__ hour:minute:second = %02d:%02d:%02d' \
%(self.hour,self.minute,self.second) def get_hour(self):
return self.hour def get_minute(self):
return self.minute def get_second(self):
return self.second def print_time(self):
print 'hour:minute:second = %02d:%02d:%02d' %(self.hour,self.minute,self.second)
说明: 构造函数 __init__(self,hour=21, minute=13, second=50) 带默认参数的定义方式 ;
用于输出的函数 __str__
得到某属性值的方法 get_xxxx
输出属性值的方法 print_time
1.2 定义日期时间类,继承时间类的属性和方法
class mydatetime(mytime):
def __init__(self,year = 2016,mounth = 1,day = 1, \
hour=21, minute=13,second=50):
super(mydatetime,self).__init__(hour,minute,second)
self.year = year
self.mounth = mounth
self.day = day def __str__(self):
return '__str__ year--mounth--day = %02d--%02d--%02d' \
%(self.year,self.mounth,self.day) def __del__(self):
""" __del__ mydatetime destroyed """
print "__del__ mydatetime destroyed" def print_date(self):
print 'year-mounth-day = %04d-%02d-%02d' \
%(self.year,self.mounth,self.day)
# self.print_time()
说明: mydatetime 继承 mytime 的属性值,这里mydatetime(子类),mytime(父类)
构造函数 __init__(self,year = 2016,mounth = 1,day = 1, hour=21, minute=13,second=50) 带默认参数的定义方式 ,注意要通过 super初始化父类属性值;
用于输出的函数 __str__
输出属性值的方法 print_date
1.3 测试
if __name__ == '__main__':
print "\n"
print "--"*10," mytime t0:"
t0 = mytime()
print t0
t0.print_time()
print t0.get_hour()
print "\n"
print "--"*10," mytime t1:"
t1 = mytime(hour=7,second=20)
t1.print_time()
print "\n"
print "--"*10," mydatetime da:"
da = mydatetime(minute=40)
print da
# da.print_date()
da.print_time()
del da
输出:
>>> runfile('F:/Python/hysrc_py/untitled0_class.py', wdir=r'F:/Python/hysrc_py')
-------------------- mytime t0:
__str__ hour:minute:second = 21:13:50
hour:minute:second = 21:13:50
21
-------------------- mytime t1:
hour:minute:second = 07:13:20
-------------------- mydatetime da:
__str__ year--mounth--day = 2016--01--01
hour:minute:second = 21:40:50
__del__ mydatetime destroyed
>>>
2 多重继承
2.1 定义父类 classA classX
class classA(object):
def __init__(self):
print('init action in father class A')
class classX(object):
def __init__(self):
print('init action in father class X')
2.2 SubClassB 继承 classA
class SubClassB(classA):
def __init__(self):
print('init action in subclass B')
super(SubClassB,self).__init__()
2.3 SubClassC 继承 SubClassB
class SubClassC(SubClassB):
def __init__(self):
print('init action in subclass C')
super(SubClassC,self).__init__()
2.4 测试
实例化一个SubClassC类
if __name__ == '__main__':
print "\n"
print "--"*10," SubClassC b:"
b = SubClassC()
由输出可知:多重继承时,子类会自动调用父类的构造函数
-------------------- SubClassC b:
init action in subclass C
init action in subclass B
init action in father class A
3 多重继承
3.1 定义两个基本类 classA 和 classX
class classA(object):
def __init__(self,a='classA'):
self.a = a
print('init action in father class A')
def print_a(self):
print self.a
class classX(object):
def __init__(self,x='classX'):
self.x = x
print('init action in father class X')
def print_x(self):
print self.x
3.2 SubClassX 类继承自 classA 和 classX
class SubClassX(classA,classX):
def __init__(self,a='SubClassX:a',x='SubClassX:x'):
print('init action in subclass X')
super(SubClassX,self).__init__()
# classX.__init__(self)
self.a = a
self.x = x
def print_SubX(self):
self.print_a()
self.print_x()
3.3 实例化一个 SubClassX 类
if __name__ == '__main__':
print "\n"
print "--"*10," SubClassX x:"
sx = SubClassX()
sx.print_SubX()
3.4 由输出可知 : SubClassX 继承了 classA 和 classX 的方法和属性,但不知为何只调用了 classA的初始化函数?
-------------------- SubClassX x:
init action in subclass X
init action in father class A
SubClassX:a
SubClassX:x
3.5 分析:其实在 3.4 的输出可知,SubClassX只调用了classA的初始化,则classX的属性是不会自动初始化的,如classX的属性值x,之所以能够输出 "SubClassX:x" ,是由于在 3.2的定义中,手动初试化了 属性值。self.a = a self.x = x
如下例:
class SubClassX(classA,classX):
def __init__(self,a='SubClassX:a',x='SubClassX:x'):
print('init action in subclass X')
super(SubClassX,self).__init__(a)
# classX.__init__(self)
# self.x = x
def print_SubX(self):
self.print_a()
self.print_x()
实例化一个 SubClassX 类:
if __name__ == '__main__':
print "\n"
print "--"*10," SubClassX x:"
sx = SubClassX()
sx.print_SubX()
输出报错: 由于定义SubClassX类时,使用 super 初始化父类,只会初试化 classA,即第一个类。而classX排在了classA之后,不会自动初始化。所以在实例化类调用方法时,即 sx.print_SubX() 。由于没有属性 'x' 而报错。
-------------------- SubClassX x:
init action in subclass X
init action in father class A
SubClassX:a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "F:/Python/hysrc_py/untitled0_class.py", line 111, in <module>
sx.print_SubX()
File "F:/Python/hysrc_py/untitled0_class.py", line 57, in print_SubX
self.print_x()
File "F:/Python/hysrc_py/untitled0_class.py", line 24, in print_x
print self.x
AttributeError: 'SubClassX' object has no attribute 'x'
>>>
错误提示:属性错误:'SubClassX' 对象 没有属性 'x'
python 类定义 继承的更多相关文章
- 孤荷凌寒自学python第二十二天python类的继承
孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...
- Python类的继承(进阶5)
转载请标明出处: http://www.cnblogs.com/why168888/p/6411918.html 本文出自:[Edwin博客园] Python类的继承(进阶5) 1. python中什 ...
- Python类定义和类继承详解
类实例化后,可以使用其属性,实际上,创建一个实例之后,可以通过类名访问其属性,如果直接使用类名修改其属性,那么直接影响已经实例化的对象. 类的私有属性: __private_attrs 两个下划线开头 ...
- python类定义与c#的一些区别
c#中可以定义一个空类,但是python中定义空类需要加pass class EmptyClass(object): pass python的lei是多继承 python子类继承了基类,如果子类也 ...
- python类定义
在我的收藏中有一篇特别详细的类讲解 此处部分内容引自:http://blog.sina.com.cn/s/blog_59b6af690101bfem.html class myclass: 'this ...
- python类定义的讲解
python是怎么定义类的,看了下面的文章大家就会了,不用多说,开始学习. 一.类定义: 复制代码代码如下: class <类名>: <语句> 类实例化后,可以使用其属性,实际 ...
- python类、继承
Python 是一种面向对象的编程语言.Python 中的几乎所有东西都是对象,拥有属性和方法.类(Class)类似对象构造函数,或者是用于创建对象的"蓝图". 一.python ...
- 记录Python类与继承的一个错误
今天在学python的类与继承的时候遇到一个错误,原来是自己在ctrl+c ctrl+v的时候漏了一个括号 class Car(): def __init__(self,make,year,mode ...
- python类的继承-1
#!/usr/bin/python3 #类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = ...
随机推荐
- Oracle死锁
当两个或多个用户相互等待锁定的数据时就会发生死锁,这时这些用户被卡在不能继续处理业务,oracle可以自动检测死锁并解决他们,通过回滚一个死锁中的语句,释放锁定的数据,回滚的话会遇到ora-00060 ...
- Scala 数据类型(二)
Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型: Byte8位有符号补码整数.数值区间为 -128 到 127 Short16位有符号补码整数.数值区间为 -327 ...
- vs2013给项目统一配置boost库
1.打开项目,然后点击菜单中的 视图->其他窗口->属性管理器 2. 打开属性管理器,点击项目前的箭头,展开项目,找到debug或者release下面的Microsoft.Cpp.Win3 ...
- 最短路径算法-Dijkstra
Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...
- windows系统下fis3安装教程
注意:在安装fis3前必须安装node和npm,详情请见官网http://nodejs.org node版本要求 0.8.x,0.10.x, 0.12.x,4.x,6.x,不在此列表中的版本不予支持. ...
- python基础-软件目录结构规范
一.定义目录结构目的 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 可维护性高: 定义好组织规则 ...
- JavaScript值类型与执行环境和垃圾处理机制
JavaScript变量分为基本值类型和引用值类型,基本值类型就是以下这五种:Boolean,Number,String,Null,Undefined.基本值类型和引用值类型具有以下特点: 1.基本值 ...
- LVS原理详解
一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...
- BZOJ 1876: [SDOI2009]SuperGCD
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3060 Solved: 1036[Submit][St ...
- 企业站SEO记录
半个多月前给接了一个企业站,赚点小钱,客户也没什么要求,所以就找了模板修改了一下就上线了,然后又做了微信网站.搭了微信公众号,也都没什么技术含量,最伤脑筋的就是做关键词排名了,虽然做的几个词竞争也不是 ...