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多线程threading.Lock锁用法实例
Nov 01 Python
Python三元运算实现方法
Jan 12 Python
python之Socket网络编程详解
Sep 29 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
python入门之井字棋小游戏
Mar 05 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
Django实现列表页商品数据返回教程
Apr 03 Python
Python Pygame实现俄罗斯方块
Feb 19 Python
python包的导入方式总结
Mar 02 Python
python - timeit 时间模块
Apr 06 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数据库开发知多少
2006/10/09 PHP
php session处理的定制
2009/03/16 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
jquery 插件学习(二)
2012/08/06 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
Python兔子毒药问题实例分析
2015/03/05 Python
python线程池threadpool使用篇
2018/04/27 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
美国在线购物频道:Shop LC
2019/04/21 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
J2EE面试题大全
2016/08/06 面试题
财务会计专业推荐信
2013/11/30 职场文书
会计工作总结范文2014
2014/12/23 职场文书
课外活动总结
2015/02/04 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
SpringBoot整合Minio文件存储
2022/04/03 Java/Android