Python入门笔记(24):Python面向对象(1)速成
一、Python经典类与新类
经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父类,或者是如果子类化的基本类没有父类,那么就定义了经典类:
- class classics:
- 'define a classics Class'
- pass
新式类:与经典类相反。object是“所有类之母”,也就是基类,如果你的类没有继承任何父类,object将作为默认的父类:
- class newClass(object):
- 'define a classics Class'
- pass
二、Python的实例化
创建一个实例的过程叫实例化,在其他编程语言中一般用关键字 new ,但是在Python中没有这个关键字。而是类似函数调用的方式创建实例的:
- class newClass(object):
- pass
- inst = newClass()
- print inst #<__main__.newClass object at 0x00B71650>
三、类最简单的用法
类最简单的用法仅仅用作名称空间,意味着将数据保存到变量中,使用句点属性标识对它们按名称空间分组。
- class newClass(object):
- pass
- bar = newClass() #创建实例
- bar.x = 1 #创建实例属性
- bar.y = 2
- print bar.x+bar.y
注意:bar.x ,bar.y 是实例对象的属性不是类的属性。
四、方法
方法就是类的功能
方法在类中定义,只能被实例调用。
在类中,方法有一个默认参数self,这个参数代表实例本身,当用实例调用方法时,由解释器悄悄传递给方法。
- class newClass(object):
- def method(self):
- return self
- bar = newClass()
- print bar.method() #<__main__.newClass object at 0x00B71910>
在其他语言中,self一般称为this,一般方法会用到这个实例(self),但是静态方法和类方法不需要。
五、创建类、方法、实例对象访问
- class addPerson(object):
- def __init__(self,nm,ph): #定义构造器
- self.name = nm #设置name
- self.phone = ph #设置phone
- print 'Created instance for',self.name
- def updatePhone(self,newph):
- self.phone = newph
- print 'Updated phone for',self.phone
- josn = addPerson(') #创建实例对象josn
- ben = addPerson(') #创建实例对象ben
- print 'Instance property:[%s][%s]' %(ben.name,ben.phone) #访问实例属性
- ben.updatePhone(')
- print ben.phone
六、子类
创建子类:靠继承来进行子类化,在不影响父类(基类)的基础上改进自己的功能。
如:继承上面的类
- class addInfo(addPerson):
- def __init__(self,nm,ph,id,em): #定义自己的构造器
- addPerson.__init__(self, nm, ph) #继承父类构造器(这个很重要)
- self.empid = id
- self.email = em
- def updateEmail(self,newem):
- self.email = newem
- print 'Updated e-mail address for:',self.name
- zhangsan = addInfo(','ZhangSan@gmail') #创建addInfo实例,输出Created instance for ZhangSan
- print zhangsan #<__main__.addInfo object at 0x00B71BD0>
- print 'Instance property:[%s],[%s],[%s],[%s]' %(zhangsan.name,zhangsan.phone,zhangsan.empid,zhangsan.email)
- #输出:Instance property:[ZhangSan],[123456789],[01],[ZhangSan@gmail]
- zhangsan.updatePhone(') #Updated phone for 250
- zhangsan.updateEmail('Zhang@163.com') #Updated e-mail address for: ZhangSan
注意:
如果需要,每个子类最好定义自己的构造器,不然的话,基类的构造器将会被调用。然而如果子类重写基类的构造器,那么基类的构造器就不会被自动调用,必须显式写出来才行,如上的:addPerson.__init__
Python入门笔记(24):Python面向对象(1)速成的更多相关文章
- Python入门笔记(22):Python函数(5):变量作用域与闭包
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
- Python入门笔记(21):Python函数(4):关于函数式编程的内建函数
一.关于函数式编程的内建函数 apply()逐渐被舍弃,这里不讨论 1.filter() #filter(func,seq) """纯Python描述filter函数&q ...
- Python入门笔记(20):Python函数(3):关于lambda
一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的.如下: """命名的foo函数&q ...
- Python入门笔记(14):Python的字符编码
一.字符编码中ASCII.Unicode和UTF-8的区别 点击阅读:http://www.cnblogs.com/kingstarspe/p/ASCII.html 再推荐一篇相关博文:http:// ...
- Python入门笔记(19):Python函数(2):函数/方法装饰器
一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装饰器声明的是被装饰的函数和被装饰的函数的可选参数,如下: @decorator(dec_opt_ar ...
- PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型
简介 Python,当然大家听到这个名词不再是有关于像JAVA 一样的关于后台,我们学习Python 的目的在于对于以后数据分析和机器学习AI 奠定基础,Python 在数据分析这一块,可谓是有较好的 ...
- python学习笔记(一):python简介和入门
最近重新开始学习python,之前也自学过一段时间python,对python还算有点了解,本次重新认识python,也算当写一个小小的教程.一.什么是python?python是一种面向对象.解释型 ...
- 大爽Python入门教程 2-4 练习
大爽Python入门公开课教案 点击查看教程总目录 方位输出 第一章有一个思考题,方位变换: 小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度), 小明面朝哪里?小明转过了多少圈? (3 ...
随机推荐
- "无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"解决办法
当程序用ado的jet4.0方式连接mdb数据库的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”. ADOConne ...
- 解决oracle 端口 1521 本机127可通 其他ip不通
http://wenku.baidu.com/link?url=8tRGGObqgLd6-yqprioIZSyluu9K0BgA29Lhx7F57pVDIHbMHVDNTa_SlEmVugGT4QJO ...
- 关于STM8空间不足的解决方法
STM8虽然功能齐全,但是空间不足也是经常出来的情况.要么.text overflow,要么.bss overflow,让人头疼.这里把一些优化方案列出来,让空间得到充分利用: 1.在Project ...
- MMO之禅(三)职业能力
MMO之禅(三)职业能力 --技术九层阶梯 Zephyr 201304 有了精神,我们还需要实际的行动. 到底需要什么能力?自我分析,窃以为为有九层,无所谓高低,因为每一层都需要不断地砥砺,编程,本身 ...
- Android Studio开发第四篇版本管理Git(下)
前面一片介绍了在as下如何关联远程仓库,这篇就介绍在开发过程中怎么应用. 提交+Push 如果本地开发代码有改动了或者你觉得某功能做完了,你打算把改动代码提交到远程仓库,这个时候很简单, 还是在工具栏 ...
- ffmpeg中的sws_scale算法性能测试
经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理.以前一直很懒,懒得测试和甄 别应该使用哪种算法,最近的工作时间,很多时候需要等待别人.忙 ...
- SGU 422 Fast Typing(概率DP)
题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...
- 正向代理VS反向代理 总结
1.访问方向 正向代理:通常是从内部访问外部的网站或服务器,但又无法直接访问到外部的网站,而这个代理是可以访问到外部网站的.如果在中国境内通过代理访问Facebook.Twitter等网站 反向代理: ...
- Devexpress treelist 树形控件 实现带三种状态的CheckBox
树形控件是使用频率很高的一种控件.对于属性控件往往需要下面两个功能 1.TreeList带有CheckBox,并且节点要有三种状态(所有的子节点都选中,所有的子节点都没选择,一部分子节点选中).使用 ...
- 在Visual Studio 2010中进行“项目重命名”的有效工具
地址:http://www.cnblogs.com/dudu/archive/2011/12/11/visual_studio_2010_project_rename.html 提示:这个工具一次 r ...