Python核心编程 笔记
2013-10-05 16:51
405 查看
第13章 面向对象编程
object是所有类之母。如果你的类没有继承任何其它父类,object将作为默认的父类。
类既可 很简单,也可以很复杂,这全凭你的需要。最简单的情况,类仅用作名称空间,意味着,你把数据保存在变量中,对他们按名称空间进行分级,使他们处于相同的关系空间中。
类成员可以动态添加,这意味着,你不需要在构造函数中将所有的类成员都初始化,另外,也意味着,同一个类的不同对象,可以不同的类成员(即,每个对象有自己的特有的成员,甚至完全都不相同)。基于此,个人认为在构造函数中将所有的成员显示的初始化, 是种不错的习惯。
Python中类的构造函数是__init__()成员函数,它至少有一个参数,这个参数就是self,它代表对象自己,相同于C++中的this指针。所有的成员函数(非静态函数)都有这个参数,并且需要明确写出来。但在调用时,却不需要传递,此由解释器完成的。
__init__()成员为实例化对象后调用的第一个成员函数。
每个子类最好定义它自己的构造函数,不然,基类的构造器会被调用。然而,如果子类重写基类的构造器,基类的构造就不会被自动调用了——这样,基类的构造器就必须显式写出来才会被执行。注意:在派生类的__init__函数中,调用基类的__init__函数时,需要显式的将self实例对象传递给基类构造器。例如:
Python并不支持纯虚函数,或者抽象方法。
类的数据属性,相当于C++中的静态数据成员,属于类拥有,而非类的实例所拥有。例如:
类拥有一个静态数据成员foo。print C.foo将输出100
Python严格要求,没有实例,方法是不能被调用的。这种限制即Python所描述的绑定概念。方法必须绑定(到一个实例)才能直接被调用。不管是否绑定,方法都是它所在类的固有属性。
要知道一个类的有哪些属性,有两种方法:
(1)最简单的是使用dir()内建函数。dir()返回的仅是对象的属性的一个名字列表。
(2)通过访问类的字典属性__dict__。__dict__返回的是一个字典,它的键是属性名,键值是相应的属性对象的数据值。
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__返回的是一个字典,它的键是属性名,键值是相应的属性对象的数据值。
相关文章推荐
- Python核心编程笔记--随机数
- Python核心编程笔记 - 第12章 模块
- [PYTHON] 核心编程笔记(20.Web编程)
- python核心编程学习笔记-2016-08-05-01-习题9-19
- [PYTHON] 核心编程笔记之三-Python基础
- Python 核心编程笔记_Chapter_6_Note_2 字符串的内建函数zip_转义字符_字符串术语
- Python核心编程笔记---- print@2
- Python 核心编程笔记 第三章 Python对象
- [PYTHON] 核心编程笔记(17.Python网络客户端编程)
- Python核心编程--学习笔记--9--文件和输入输出
- [PYTHON] 核心编程笔记(11.Python函数和函数式编程)
- [PYTHON] 核心编程笔记(21.数据库编程)
- [PYTHON] 核心编程笔记(13.Python面向对象编程) 推荐
- [PYTHON] 核心编程笔记之四-Python对象
- python核心编程学习笔记-pyt…
- python核心编程--笔记(不定时跟新)(转)
- [PYTHON] 核心编程笔记(12.Python模块)
- python核心编程学习笔记-2016-08-13-05-property()函数
- python核心编程学习笔记-2016-08-02-01-读取文件的函数中的文件指针问题
- python核心编程学习笔记-2016-08-03-01-习题9-9