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和JavaScript间代码转换的4个工具
Feb 22 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
Python3 socket同步通信简单示例
Jun 07 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
Django实现发送邮件找回密码功能
Aug 12 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
python如何实现递归转非递归
Feb 25 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 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数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
js转换对象为xml
2017/02/17 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
node.js到底要不要加分号浅析
2018/07/11 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
员工廉洁自律承诺书
2014/05/26 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫