• 组合与派生


    一个类被定义后,目标就是要把它当成一个模块来使用,并把这些对象嵌入到你的代码中去,同其它数据类型及逻辑执行流混合使用。有两种方法可以在你的代码中利用类。第一种是组合(composition)。就是让不同的类混合并加入到其它类中,来增加功能和代码重用性。 另一种方法是派生。我们先来看组合。

    举例来说,比如我们想设计一个AddrBookEntry 的 class。在设计的过程中我们先设计了 Name class 和 Phone class 。 那么我们在设计 AddrBookEntry的过程中就可以直接把Name和Phone加入到AddrBookEntry中,而不必写一个全新的AddrBookEntry。

    >>> class Name:
    ...     def __init__(self,nm):
    ...             self.name=nm
    ...
    
    >>> class Phone:
    ...     def __init__(self,num):
    ...             self.num=num
    ...
    >>> class AddrBookEntry:
    ...     def __init__(self,nm='null',ph='null'):
    ...             self.name=Name(nm)
    ...             self.phone=Phone(ph)
    ...
    >>>
    >>> abe1=AddrBookEntry('kramer',12345678)
    >>> abe2=AddrBookEntry()
    >>> abe1.name.name
    'kramer'
    >>> abe1.phone.num
    12345678
    >>> abe2.name.name
    'null'
    >>> abe2.name.name
    'null'
    

      

    再看派生。 当类之间有显著的不同,并且(较小的类)是较大的类所需要的组件时,组合表现得很好,但当你设计“相同的类但有一些不同的功能”时,派生就是一个更加合理的选择了 

    比如我们上面的例子中设计了一个AddrBookEntry 类。 如果我们还想设计一个EmpAddrBookEntry。 里面存储的信息更偏重于工作信息比如部门,工号等。而又想设计一个PersonalAddrBookEntry 里面存储的信息更多是关于私人比如家庭住址等等。那么我们就可以从 addrBookEntry来派生子类。

    创建子类的语法非常简单如下:

    class SubClassName (ParentClass1[, ParentClass2, ...]):
    	class_suite
    

    经典类的语法与新式类不同之处就在于前者没有从任何祖先派生:

    class ClassicClassWithoutSuperclasses:
        class_suite

    派生的目的是从父类派生出子类,子类会拥有父类的所有属性,不管是数据还是方法。 不过 其实这样说法有点武断,因为有个属性__doc__不可以被子类集成。我们通过下面的代码来看一下:

    >>> class P:
    ...     'this is class P, classic class'
    ...     def __init__(self):
    ...             print 'this is an instance of ', self.__class__.__name__
    ...
    >>> class C(P):
    ...     pass
    ...
    >>> p=P()
    this is an instance of  P
    >>> c=C()
    this is an instance of  C
    
    
    >>> p.__doc__
    'this is class P, classic class'
    >>> c.__doc__
    >>>

     

  • 相关阅读:
    測试能否发表博客
    换站点Logo图片---轻开电子商务系统(企业入门级B2C站点)
    后台运行命令:&和nohup command & 以及关闭、查看后台任务
    HttpClient将手机上的数据发送到服务器
    支付宝电脑网站支付
    远程使用tomcat8的首页的管理工具
    数据结构之链表基本操作
    数据结构之链表反向打印
    ultraedit开发使用技巧
    charles抓取https中出现unknow
  • 原文地址:https://www.cnblogs.com/kramer/p/3685373.html
Copyright © 2020-2023  润新知