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 Web框架Flask下网站开发入门实例
Feb 08 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
Python装饰器用法实例分析
Jan 14 Python
Python何时应该使用Lambda函数
Jul 02 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
Python 经典算法100及解析(小结)
Sep 13 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
Python字符串常规操作小结
Apr 03 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优于Node.js的五大理由分享
2012/09/15 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
生成二维码方法汇总
2014/12/26 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
django celery redis使用具体实践
2019/04/08 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
商场活动策划方案
2014/01/24 职场文书
退学证明范本3篇
2014/10/29 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
大国崛起英国观后感
2015/06/02 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis