Chinaunix首页 | 论坛 | 博客
  • 博客访问: 274064
  • 博文数量: 36
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 411
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-04 22:05
个人简介

追求永无止境

文章分类
文章存档

2016年(3)

2015年(33)

分类: Python/Ruby

2015-08-27 16:49:51

之前学过java,c++的面向对象编程,在接触了python面向对象编程后还是有点不习惯一些变化,方便熟悉python的面向对象编程特作一下记录。
python面向对象编程要点:
1、python的新式类要求 必须继承至少一个父类,参数可以是一个(单继承)或多个(多继承)用于继承的父类。
2、object是“所有类之母”,如果你的类没有继承任何其他父类,object将作为默认的父类。它位于所有类继承结构的最上层。如果你没有直接或间接的子类化一个对象,那么就定义了一个经典类。(经典类已经过时,可以继续使用它们,但是最好使用新式类)
    经典类形式:

点击(此处)折叠或打开

  1. class MyNewObjectType:
  2.   'define MyNewObjectType classic class'
  3.   class_suite
3、创建一个实例过程:(注意:没有使用new关键字)

点击(此处)折叠或打开

  1. myFirstObject = MyNewObjectType()
4、最简单的类的情况:仅用作名称空间

点击(此处)折叠或打开

  1. class MyData(object):
  2.   pass
5、方法定义过程:

点击(此处)折叠或打开

  1. class MyDataWithMethod(object)    #定义类
  2.   def printFoo(self):             #定义方法
  3.     print 'You invoked printFoo()!'
注意:self参数,它在所有的方法声明中都存在。这个参数代表实例对象本身,当你用实例调用方法时,由解释器悄悄传递给方法的。
6、__init__()类似于类构造器。在python中,__init__()实际上不是一个构造器,你没有调用“new”来创建一个新的对象。(python根本没有“new”关键字)。python创建实例后,在实例化过程中,调用__init__()方法,当一个类被实例化时,就可以定义额外的行为。

用一个实例来说明最基本的python入门面向对象编程:

点击(此处)折叠或打开

  1. class AddrBookEntry(object):    #定义类
  2.   'address book entry class'    #说明性文档
  3.   def __init__(self,nm,ph):    #定义构造器
  4.     self.name = nm                #设置name
  5.     self.phone = ph
  6.     print "Created instance for:",self.name

  7.   def updatePhone(self,newph):    #定义方法
  8.     self.phone = newph
  9.     print "Updated phone# for:",self.phone


  10. class EmplAddrBookEntry(AddrBookEntry):    #定义子类EmplAddrBookEntry 继承自AddrBookEntry
  11.   'Employee Address Book Entry class'
  12.   def __init__(self,nm,ph,id,em):
  13.     AddrBookEntry.__init__(self,nm,ph)
  14.     self.empid = id
  15.     self.email = em

  16.   def updateEmail(self,newem):
  17.     self.email = newem
  18.     print 'Updated e-mail address for:',self.name

  19. john = EmplAddrBookEntry('John Doe','400-88889876',43,'JOHN@spam.doe')    #实例化子类
  20. jane = EmplAddrBookEntry('Jane Doe','650-12344321',23,'jane@123.com')

  21. print john.name            #打印子类属性
  22. print john.phone
  23. print john.empid
  24. print john.email
  25. print jane.name
  26. print jane.phone
  27. print jane.empid
  28. print jane.email

  29. john.updatePhone('400-12348888')    #调用父类的updatePhone方法
  30. joh.phone    #输出更新的电话号码
  31. john.updateEmail('john@456.com')
  32. john.email    #打印更新后的email








阅读(2348) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~