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列出一个文件夹及其子目录的所有文件
Jun 30 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
May 16 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
Python解析命令行读取参数之argparse模块
Jul 26 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
Python使用pyecharts控件绘制图表
Jun 05 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中利用XML技术构造远程服务(下)
2006/10/09 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
php微信开发之谷歌测距
2018/06/14 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
js模拟类继承小例子
2010/07/17 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
python九九乘法表的实例
2017/09/26 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
Django 路由控制的实现
2019/07/17 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
python try...finally...的实现方法
2020/11/25 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
公司离职证明范本
2014/01/13 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis