Python程序设计入门(5)类的使用简介


Posted in Python onJune 16, 2014

一、类的定义和使用

python定义一个类的基本语法是:

class classname([基类一,基类二...]):
    [def __init__(self, [agv1,agv2...]):]  # 定义构造函数
    def method1(self, [agv1,agv2...]):  # 成员函数

   
使用时用:

对象实例名 = 类名(参数列表)

对象实例名.成员函数名(参数列表)

和其它语言不同之处是:

(1) python没有new关键字
(2) 成员函数必须带有 self 参数(它相当于传统语言里的 this )
(3) 成员变量不需要显式定义,不过为了方便起见,大多数人还是会在构造函数里定义,以免过于莫名其妙。
例:

# -*- coding: gb18030 -*-
class mycls:
    def __init__(self, vl, vr):
        self.l = vl
        self.r = vr
    def show_me(self):
        print x.l, x.r
x = mycls(3, 15)
x.show_me()

二、高级应用

1、成员函数类型变量

python 可以直接把一个成员函数作为一个变量,就上面的类而言,可以这样:

x = mycls(3, 15)
myx = x.show_me()
print 'I am a copy!\n'
myx

2、继承和多继承

要继承其它类,定义时指定要继承的基类即可
class classname([基类一,基类二...]):

3、私有成员

python实际上并没有私有成员的概念,不过如果把变量名定义为 ___var (三个下划线)这样系统会自动把名称改为 _classname___var,

这个值可以用 self.___var 读取(因为会一起替换),但在外部是无法用  obj.___var 读取的。

如:

class test_cls:
    def __init__(self):
        self.___aaa = 'I am a python!'
    def test_func(self):
        print self.___aaa
#这种方法能输出正确结果
x = test_cls()
x.test_func()
#下面这种方法会报错!
x = test_cls()
print x.___aaa

三、迭代器 和 发生器

在 python 中,很多东西都是可以用 for 来遍历的,实际是这个东西的实现是通过迭代器或发生器来实现的

1、迭代器

class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)    def __iter__(self):
        return self
    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

#应用
for cin Reverse('spam'):
    print c

这里的重点是 __iter__ 和 next 两个函数,使用  next 时,用  raise StopIteration 指定遍历结束。

2、发生器

发生器实际是用单独一个函数实现被遍历的源
在发生器函数中, 用 yield varname 返回每次被遍历的元素即可
例:

def reverse(data):
    for index in range(len(data)-1, -1, -1):
        yield data[index]for c in reverse('golf'):
    print c

至此,python的基本语法也说得差不多了,至于其它一些隐秘的东西,需要大家实际操作去发现了。

Python 相关文章推荐
常见的在Python中实现单例模式的三种方法
Apr 08 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
使用Python对Csv文件操作实例代码
May 12 Python
Python实现购物系统(示例讲解)
Sep 13 Python
Python网络编程详解
Oct 31 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
Python Merge函数原理及用法解析
Sep 16 Python
Python加密技术之RSA加密解密的实现
Apr 08 Python
Python程序设计入门(4)模块和包
Jun 16 #Python
Python程序设计入门(3)数组的使用
Jun 16 #Python
Python程序设计入门(2)变量类型简介
Jun 16 #Python
Python程序设计入门(1)基本语法简介
Jun 13 #Python
Python对两个有序列表进行合并和排序的例子
Jun 13 #Python
用Python输出一个杨辉三角的例子
Jun 13 #Python
Python 的 with 语句详解
Jun 13 #Python
You might like
删除无限级目录与文件代码共享
2006/07/12 PHP
PHP类的反射用法实例
2014/11/03 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
php use和include区别总结
2019/10/13 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
js实现圆盘记速表
2015/08/03 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python 文件处理注意事项总结
2017/04/10 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
PHP如何与mysql建立链接
2013/05/05 面试题
中间件分为哪几类
2012/03/14 面试题
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
护理专业推荐信
2013/11/07 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
建房协议书
2014/04/11 职场文书
七年级地理教学计划
2015/01/22 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
寒假生活随笔
2015/08/15 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL