之前学过java,c++的面向对象编程,在接触了python面向对象编程后还是有点不习惯一些变化,方便熟悉python的面向对象编程特作一下记录。
python面向对象编程要点:
1、python的新式类要求 必须继承至少一个父类,参数可以是一个(单继承)或多个(多继承)用于继承的父类。
2、object是“所有类之母”,如果你的类没有继承任何其他父类,object将作为默认的父类。它位于所有类继承结构的最上层。如果你没有直接或间接的子类化一个对象,那么就定义了一个经典类。(经典类已经过时,可以继续使用它们,但是最好使用新式类)
经典类形式:
-
class MyNewObjectType:
-
'define MyNewObjectType classic class'
-
class_suite
3、创建一个实例过程:(注意:没有使用new关键字)
-
myFirstObject = MyNewObjectType()
4、最简单的类的情况:仅用作名称空间
-
class MyData(object):
-
pass
5、方法定义过程:
-
class MyDataWithMethod(object) #定义类
-
def printFoo(self): #定义方法
-
print 'You invoked printFoo()!'
注意:self参数,它在所有的方法声明中都存在。这个参数代表实例对象本身,当你用实例调用方法时,由解释器悄悄传递给方法的。
6、__init__()类似于类构造器。在python中,__init__()实际上不是一个构造器,你没有调用“new”来创建一个新的对象。(python根本没有“new”关键字)。python创建实例后,在实例化过程中,调用__init__()方法,当一个类被实例化时,就可以定义额外的行为。
用一个实例来说明最基本的python入门面向对象编程:
-
class AddrBookEntry(object): #定义类
-
'address book entry class' #说明性文档
-
def __init__(self,nm,ph): #定义构造器
-
self.name = nm #设置name
-
self.phone = ph
-
print "Created instance for:",self.name
-
-
def updatePhone(self,newph): #定义方法
-
self.phone = newph
-
print "Updated phone# for:",self.phone
-
-
-
class EmplAddrBookEntry(AddrBookEntry): #定义子类EmplAddrBookEntry 继承自AddrBookEntry
-
'Employee Address Book Entry class'
-
def __init__(self,nm,ph,id,em):
-
AddrBookEntry.__init__(self,nm,ph)
-
self.empid = id
-
self.email = em
-
-
def updateEmail(self,newem):
-
self.email = newem
-
print 'Updated e-mail address for:',self.name
-
-
john = EmplAddrBookEntry('John Doe','400-88889876',43,'JOHN@spam.doe') #实例化子类
-
jane = EmplAddrBookEntry('Jane Doe','650-12344321',23,'jane@123.com')
-
-
print john.name #打印子类属性
-
print john.phone
-
print john.empid
-
print john.email
-
print jane.name
-
print jane.phone
-
print jane.empid
-
print jane.email
-
-
john.updatePhone('400-12348888') #调用父类的updatePhone方法
-
joh.phone #输出更新的电话号码
-
john.updateEmail('john@456.com')
-
john.email #打印更新后的email
阅读(2348) | 评论(0) | 转发(0) |