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 相关文章推荐
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
python中有关时间日期格式转换问题
Dec 25 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 Python
Python通过文本和图片生成词云图
May 21 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
python压包的概念及实例详解
Feb 17 Python
Django模型层实现多表关系创建和多表操作
Jul 21 Python
python编程项目中线上问题排查与解决
Nov 01 Python
python脚本框架webpy模板控制结构
Nov 20 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
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
python实现计算倒数的方法
2015/07/11 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
django解决跨域请求的问题
2018/11/11 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
用python解压分析jar包实例
2020/01/16 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
EJB实例的生命周期
2016/10/28 面试题
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
卫生巾广告词
2014/03/18 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
公司仓库管理制度
2015/08/04 职场文书
基于JavaScript实现年月日三级联动
2021/06/22 Javascript