zoukankan      html  css  js  c++  java
  • python中的类与方法

    1. 类

    在Python 中,面向对象编程主要有两个主题,就是类和类实例。类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息。

    首先,python中有两种风格的类:新式类和经典类。新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类,参数bases可以是一个(单继承)或多个(多重继承)用于继承的父类。推荐尽可能使用新式类。

    class MyNewObjectType(bases):
      'define MyNewObjectType class'#类文档字符串
      class_suite #类体

    object 是“所有类之母”。如果你的类没有继承任何其他父类,object 将作为默认的父类。它位于所有类继承结构的最上层。如果你没有直接或间接的子类化一个对象,那么你就定义了一个经
    典类:

    class MyNewObjectType:
      'define MyNewObjectType classic class'#类文档字符串
      class_suite

    注意有的地方在语法构成上需要有一行语句(即使是类文档字符串也可以),但实际上不需要做任何操作,这时候可以使用pass语句,如果没有pass的话,编译器会报错。示例如下:

    class MyData(object):
      pass

    2. 方法
    python的方法声明中都有一个参数self,这个参数代表实例对象本身。方法调用时,python解释器会把self默认作为第一个参数传递进来,比如有一个带两个参数的方法,那么调用时只需要传递第二个参数。

    class MyDataWithMethod(object): # 定义类
      def printFoo(self): # 定义方法
        print 'You invoked printFoo()!'

     注意Python 并不支持纯虚函数(像C++)或者抽象方法(如在JAVA 中),这些都强制程序员在子类中定义方法。作为替代方法,你可以简单地在基类方法中引发NotImplementedError 异常,这样可以获得类似的效果。

    3. 绑定方法和非绑定方法

    方法只有在其所属的类拥有实例时,才能被调用。当存在一个实例时,方法才被认为是绑定到那个实例了。没有实例时方法就是未绑定的。当没有实例并且需要调用一个非绑定方法的时候,则必须传递self 参数。调用非绑定方法并不经常用到。需要调用一个还没有任何实例的类中的方法的一个主要的场景是:你在派生一个子类,而且你要覆盖父类的方法,这时你需要调用那个父类中想要覆盖掉的构造方法。

    View Code
    class AddrBookEntry(object):
    'define address book entry class'
    def __init__(self, nm, ph):
    self.name = nm
    self.phone = ph

    class EmplAddrBookEntry(AddrBookEntry):
      'Employee Address Book Entry class' # 员工地址记录条目
      def __init__(self, nm, ph, id, em): # 明确传递父类构造器所需要的self参数

        AddrBookEntry.__init__(self, nm, ph)
        self.empid = id
        self.email = em

    调用父类方法,还可以用super关键字来实现。 

    class EmplAddrBookEntry(AddrBookEntry):
    'Employee Address Book Entry class'
    def __init__(self, nm, ph, id, em):
    super(EmplAddrBookEntry, self).__init__(nm, ph)
    self.empid = id
    self.email = em

    使用super()的漂亮之处在于,不需要明确提供父类。这意味着如果改变了类继承关系,只需要改一行代码(class 语句本身)而不必在大量代码中去查找所有被修改的那个类的名字。

    这里,跟JAVA不同的是,覆盖__init__方法跟覆盖非特殊方法一样,子类被实例化时,基类的__init__不会被自动调用。如果不覆盖父类的__init__方法,子类被实例化时,将会被继承并自动调用。

    python推荐:类名通常由大写字母开头,方法名推荐使用骆驼记法的下划线方式,比如:update_phone, update_email。

    在python中写中文注释会报错,这时只要在头部加上# coding=gbk即可。

  • 相关阅读:
    电商商品概念与销售知识图谱
    【文本分类-中文】textCNN
    【DL-0】神经网络权重的初始化方法
    【E-13】TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
    【E-12】Variable x already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:
    【ML-13-8】条件随机场CRF--词性标注任务
    【ML-13-7】隐马尔科夫模型HMM--词性标注任务
    【NLP-2017-SA】解读-Recurrent Attention Network on Memory for Aspect Sentiment Analysis(2017emnlp)
    【NLP-2019】解读BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
    【NLP-2019-SA】解读--An Interactive Multi-Task Learning Network for End-to-End Aspect-Based Sentiment Analysis-2019ACL
  • 原文地址:https://www.cnblogs.com/prettymdx/p/2395481.html
Copyright © 2011-2022 走看看