时间给了够幸福的结局

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即可。

 

posted on 2012-03-14 10:34  时间给了够幸福的结局  阅读(1656)  评论(0编辑  收藏  举报