全部博文(2065)
分类: Python/Ruby
2010-01-26 14:32:24
python面向对象专题
[整理人:hkebao@126.com 整理时间:
一、概述
采用面向对象编程之后程序员的重点是放在创建他们自定义的类型上即类。类可以称为程序员自定义类型。每个类都包含了数据和一系统数据处理函数。
尽最大可能实现代码的重用重用可重用!要创建宝贵的类
示例:
#-*- coding: utf-8 -*-
class Time:
def __init__(self):
self.hour = 0
self.minute = 0
self.second
= 0
def printStandard(self):
standardTime = ""
if self.hour == 0 or self.hour == 12:
standardTime += "12:"
else:
standardTime += "%d" % (self.hour % 12)
standardTime += "%.2d:%.2d" % (self.minute,self.second)
if self.hour < 12:
standardTime += "AM"
else:
standardTime += "PM"
print standardTime
Python中定义了几个特殊方法,这些特殊方法之前与之后都有双下划线(__)
就是定义特殊的方法!
其中的:self 表示对象引用参数!
PS2:不建议直接访问对象的属性。
以下列出python对象提供有关于自已的信息,通过这些信息反馈了python 的内省功能
__bases__ 包含基类的一个元组,类可从这些基类直接继承。如果类不从其他类继承,元组就会为空 。示例:print Time.__bases__ 打印当前类的父类
__dict__ 与类的命名空间对应的一个字典。其中每个键-值对都代表在命名空间中的一个标识符及值 示例:print
Time.__dict__
输出:{'__module__': '__main__', 'printStandard':
__doc__ 类的文档化字符串。如果类没有指定文档化字符串值为None
__module__ 包含模块(文件)名的一个字符串,类定义在这个模块中
示例: 打印输出 __main__
__name__ 包含类名的一个字符串
二、
类的封装隐藏属性
通过get set操作可以避免无效数据值,还可将类的客户与数据的表示分开。如果数据表示需要更改只需要更改方法主体。对客户提供的接口保持不变。
def setHour(self,hour):
if 0 <= hour < 24:
self._hour = hour
else:
raise ValueError,"value is error %d" % hour
对属性定义set方法
而且这里面应用的比较多的就是直接抛异常出来!
而且对于想要设置为私有属性的一般定义成_hour 的样子。这样的话如果你直接访问此属性就可能会抛出异常出来!
私有属性
在python中有一种特别的机制来防止任意访问数据。可以考虑在属性名附加双下划线(__)就可以
禁止对数据的随意防止。
如果定义私有属性
self.__private = 0
不可在外面直接访问它!
三、
为构造函数使用默认参数
def __init__(self,hour=0,minute=0,second=0):
self._hour = hour
self._minute = minute
self._second = second
声明一个对象的方法
obj = Time(1,3) 或 obj = Time(1,3,1) 都没有问题的!
四、
析构函数
用于将对象销毁掉。将对象干掉
类可定义名为__del__的一个特殊方法。它只是执行终止清理工作。然后由解释器回收对象的内存。使内存能被重用。
五、
类属性
类属性:类范围的信息。这是类的一个属性而不是说某个特定对象的属性。
相当于JAVA中的 static属性一样的。
PS:如果想节省内存而且一个类属性够用,就可使用类属性以节省空间了。因为只保留一份所以少占空间
相当于是静态变量的用法。
class Time(object):
count = 0 #表示定义了类属性
六、 合成
对象引用作为类成员使用。将一个类B放到类A中当成员使用
合成是软件重用的一种办法。即类的成员引用了其他类的对象。
七、 数据抽象和信息隐藏
堆栈:
它是一种后入先出的数据结构的!
八、 自定义类
8.1 自定义字符串表示:__str__
类定义
def __str__(self):
return "class"
if __name__ == '__main__':
obj = Time(1,3)
print obj #直接打印此类的对象就会直接调用此方法__str__
8.2 自定义属性访问
__delattr__ 客户删除一个属性时可执行(del object.attribute)
__getattr__ 客户访问一个属性名,但找不到这个名称时执行
__setatr__
客户将值指派给对象的属性时执行(object.attribute=value)
8.3 运算符重载
可以应用此用于一个类的对象。尽管python不允许创建新的运算符,但它允许重载现有的大多数运算符
9、继承
10、多态
通过继承联系在一块的各个不同的对象可针对同样的消息(方法调用)做不同的响应。这就是多态
11、静态方法
静态方法是不需要类的对象存在就可以直接调用的。一般是指一个比较实用的方法。