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 类定义 继承的更多相关文章

  1. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  2. Python类的继承(进阶5)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6411918.html 本文出自:[Edwin博客园] Python类的继承(进阶5) 1. python中什 ...

  3. Python类定义和类继承详解

    类实例化后,可以使用其属性,实际上,创建一个实例之后,可以通过类名访问其属性,如果直接使用类名修改其属性,那么直接影响已经实例化的对象. 类的私有属性: __private_attrs 两个下划线开头 ...

  4. python类定义与c#的一些区别

    c#中可以定义一个空类,但是python中定义空类需要加pass class EmptyClass(object): pass python的lei是多继承   python子类继承了基类,如果子类也 ...

  5. python类定义

    在我的收藏中有一篇特别详细的类讲解 此处部分内容引自:http://blog.sina.com.cn/s/blog_59b6af690101bfem.html class myclass: 'this ...

  6. python类定义的讲解

    python是怎么定义类的,看了下面的文章大家就会了,不用多说,开始学习. 一.类定义: 复制代码代码如下: class <类名>: <语句> 类实例化后,可以使用其属性,实际 ...

  7. python类、继承

    Python 是一种面向对象的编程语言.Python 中的几乎所有东西都是对象,拥有属性和方法.类(Class)类似对象构造函数,或者是用于创建对象的"蓝图". 一.python ...

  8. 记录Python类与继承的一个错误

    今天在学python的类与继承的时候遇到一个错误,原来是自己在ctrl+c  ctrl+v的时候漏了一个括号 class Car(): def __init__(self,make,year,mode ...

  9. python类的继承-1

    #!/usr/bin/python3 #类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = ...

随机推荐

  1. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  2. 织梦Dedecms安全设置

    织梦DedeCMS是一款非常流行的CMS,很多刚开始建站人都用的织梦,一方面是织梦比较容易操作;另一方面是织梦的SEO方面做的确实比其他的系统要好一些.这些都导致织梦的用户群是非常庞大的,用的人多了, ...

  3. Java并发之原子变量和原子引用与volatile

    我们知道在并发编程中,多个线程共享某个变量或者对象时,必须要进行同步.同步的包含两层作用:1)互斥访问(原子性):2)可见性:也就是多个线程对共享的变量互斥地访问,同时线程对共享变量的修改必须对其他线 ...

  4. MySQL 常用命令总结

    http://blog.csdn.net/hanxin1987216/article/details/5976860 一.总结 1.Linux系统下启动MySQL的命令: mysqladmin sta ...

  5. 【FLUENT案例】05:DDPM模型

    本例利用FLUENT的DDPM模型对提升管进行模拟. 1 介绍 本案例演示在FLUENT中利用稠密离散相模型(Dense discrete phase model,DDPM)模拟2D提升管.DDPM模 ...

  6. html基础起航

    废话不多说,直接上例子! 工欲善其事,必先利其器 浏览器要有吧~                       比如:IE.Chrome.Firefox…… 纯文本编辑软件不可少~          比 ...

  7. SCNU 2015ACM新生赛初赛【1007. ZLM的扑克牌】解题报告

            题目链接详见SCNU 2015新生网络赛 1007. ZLM的扑克牌 .         其实我在想这题的时候,还想过要不要设置求最小的排列,并且对于回文数字的话,可以把扑克牌折起来( ...

  8. Pwn~

    Pwn Collections Date from 2016-07-11 Difficult rank: $ -> $$... easy -> hard CISCN 2016 pwn-1 ...

  9. rxjs5.X系列 —— filter系列 api 笔记

    欢迎指导与讨论 :) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第二篇 -- filter转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxjs官 ...

  10. common-pool2 学习:thrift连接池的另一种实现

    对象池是一种很实用的技术,经典的例子就是数据库连接池.去年曾经从零开始写过一个thrift客户端连接池.如果不想重造轮子,可以直接在apache开源项目commons-pool的基础上开发. 步骤: ...