Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26267847
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2010-01-26 14:32:24

python面向对象专题

[整理人:hkebao@126.com 整理时间:2010-1-26

一、概述

采用面向对象编程之后程序员的重点是放在创建他们自定义的类型上即类。类可以称为程序员自定义类型。每个类都包含了数据和一系统数据处理函数。

尽最大可能实现代码的重用重用可重用!要创建宝贵的类

示例:

#-*- 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': , '__dict__': , '__weakref__': , '__doc__': None, '__init__': }

__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、静态方法

静态方法是不需要类的对象存在就可以直接调用的。一般是指一个比较实用的方法。

 

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