您的位置:首页 > 编程语言 > Python开发

Python核心编程 笔记

2013-10-05 16:51 405 查看
第13章 面向对象编程

object是所有类之母。如果你的类没有继承任何其它父类,object将作为默认的父类。

类既可 很简单,也可以很复杂,这全凭你的需要。最简单的情况,类仅用作名称空间,意味着,你把数据保存在变量中,对他们按名称空间进行分级,使他们处于相同的关系空间中。

类成员可以动态添加,这意味着,你不需要在构造函数中将所有的类成员都初始化,另外,也意味着,同一个类的不同对象,可以不同的类成员(即,每个对象有自己的特有的成员,甚至完全都不相同)。基于此,个人认为在构造函数中将所有的成员显示的初始化, 是种不错的习惯。

Python中类的构造函数是__init__()成员函数,它至少有一个参数,这个参数就是self,它代表对象自己,相同于C++中的this指针。所有的成员函数(非静态函数)都有这个参数,并且需要明确写出来。但在调用时,却不需要传递,此由解释器完成的。

__init__()成员为实例化对象后调用的第一个成员函数。

每个子类最好定义它自己的构造函数,不然,基类的构造器会被调用。然而,如果子类重写基类的构造器,基类的构造就不会被自动调用了——这样,基类的构造器就必须显式写出来才会被执行。注意:在派生类的__init__函数中,调用基类的__init__函数时,需要显式的将self实例对象传递给基类构造器。例如:

class CAddrBookEntry (object):
'address book entry class'

def __init__ (self, nm, ph):
self.name = nm
self.phone = ph
print 'Created instance for:', self.name

def updatePhone (self, newph):
self.phone = newph
print 'Updated phone# for:', self.name

class CEmplAddBookEntry (CAddrBookEntry):
'Employee Address Book Entry class'

def __init__(self, nm, ph, id, em):
CAddrBookEntry.__init__(self, nm, ph)
self.empid = id
self.email = em
def updateEmail (self, newem):
self.email = newem
print 'Update e-mail address for:', self.name


Python并不支持纯虚函数,或者抽象方法。

类的数据属性,相当于C++中的静态数据成员,属于类拥有,而非类的实例所拥有。例如:

class C(obejct):
foo = 100

类拥有一个静态数据成员foo。print C.foo将输出100

Python严格要求,没有实例,方法是不能被调用的。这种限制即Python所描述的绑定概念。方法必须绑定(到一个实例)才能直接被调用。不管是否绑定,方法都是它所在类的固有属性。

要知道一个类的有哪些属性,有两种方法:

(1)最简单的是使用dir()内建函数。dir()返回的仅是对象的属性的一个名字列表。

(2)通过访问类的字典属性__dict__。__dict__返回的是一个字典,它的键是属性名,键值是相应的属性对象的数据值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: