简明python教程七----面向对象的编程
根据操作数据的函数或语句块来设计程序的,被称为面向过程的编程。
把数据和功能结合起来,用称为对象的东西包裹起来的组织程序的方法,称为面向对象的编程理念。
类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类的实例
属于一个对象或类的变量被称为域。
对象可以使用属于类的函数来具有功能,这样的函数被称为类的方法。
域和方法可以合称为类的属性。
域有两种类型--属于每个实例/类的对象或属于类本身。分别被称为实例变量和类变量。
类使用class关键字创建。类的域和方法被列在一个缩进块中。
self
类的方法与普通的函数只有一个特别的区别:它们有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,python会提供这个值。这个特别的变量指对象本身,按照惯例它名称是self。
创建一个类
class Person:
pass p = Person()
print p
输出:
<__main__.Person instance at 0xf6fcb18c>
class语句后跟类名,创建了一个新的类。后面跟着一个缩进的语句块形成类体。
后面类名后跟一对圆括号来创建一个对象/实例。
对象的方法
类/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量。
class Person:
def sayHi(self):
print 'Hello,how are you?' p = Person()
p.sayHi()
注意sayHi方法没有任何参数,但仍然在函数定义时有self
__init__方法
__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化。注意,这个名称的开始和结尾都是双下划线。
class Person:
def __init__(self,name):
self.name = name
def sayHi(self):
print 'Hello,my name is',self.name p = Person('Swaroop')
p.sayHi()
结果:
Hello,my name is Swaroop
有两种类型的域:类的变量和对象的变量。
类的变量由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。
对象的变量由类的每个对象/实例拥有。每个对象有自己对这个域的一份拷贝,即他们不是共享的。
#!/usr/bin/python
#Filename:objvar.py class Person:
'''Represents a person.'''
population= def __init__(self,name):
'''Initializes the person's data.'''
self.name = name
print '(Initializing %s)'%self.name #when this person is created,he/she
#adds to the population
Person.population+= def __del__(self):
'''I am dying.'''
print '%s says bye.' %self.name Person.population -= if Person.population == :
print'I am the last one.'
else:
print 'There are still %d people left.'%Person.population def sayHi(self):
'''Greeting by the person. Really,that's all it does.'''
print 'Hi,my name is %s.'%self.name def howMany(self):
'''Prints the current population.'''
if Person.population == :
print 'I am the only person here.'
else:
print'We have %d persons here.'% Person.population swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany() kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany() swaroop.sayHi()
swaroop.howMany()
结果:
(Initializing Swaroop)
Hi,my name is Swaroop.
I am the only person here.
(Initializing Abdul Kalam)
Hi,my name is Abdul Kalam.
We have persons here.
Hi,my name is Swaroop.
We have persons here.
说明:population属于Person类,因此是一个类的变量。name变量属于对象(它使用self赋值)因此是对象的变量。
记住:
Python中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。
例外:你使用的数据成员名称以双下划线前缀比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
这是一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。
简明python教程七----面向对象的编程的更多相关文章
- 简明python教程七----面向对象的编程(下)
继承:类之间的类型和子类型关系 代码重用:SchoolMember类被称为 基本类或超类,而Teacher和Student类被称为导出类或者子类 #!/usr/bin/python #Filename ...
- 笔记|《简明Python教程》:编程小白的第一本python入门书
<简明Python教程>这本书是初级的Python入门教材,初级内容基本覆盖,对高级内容没有做深入纠结.适合刚接触Python的新手,行文比较简洁轻松,读起来也比较顺畅. 下面是我根据各个 ...
- 《简明python教程》笔记一
读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info 安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...
- (原+转)简明 Python 教程:总结
简明 Python 教程 说明:本文只是对<简明Python教程>的一个总结.请搜索该书查看真正的教程. 第3章 最初的步骤 1. Python是大小写敏感的. 2. 在#符号右面的内容 ...
- 【转】简明 Python 教程
原文网址:http://woodpecker.org.cn/abyteofpython_cn/chinese/ 简明 Python 教程Swaroop, C. H. 著沈洁元 译www.byteof ...
- python学习(一)—简明python教程
2016-04-12 15:59:47 1. 介绍2. 安装Python3. 最初的步骤4. 基本概念5. 运算符与表达式6. 控制流7. 函数8. 模块9. 数据结构10. 解决问题——编写一个Py ...
- python读书笔记-《简明python教程》上
1月15日 <简明python教程>上 基本结构: 基础概念+控制流+函数+模块+数据结构+面向对象+I/O+异常+标准库+其他 1.概念 1-0 退出python linux: ...
- 学习笔记《简明python教程》
学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...
- 《简明Python教程》学习笔记
<简明Python教程>是网上比较好的一个Python入门级教程,尽管版本比较老旧,但是其中的基本讲解还是很有实力的. Ch2–安装Python:下载安装完成后,在系统的环境变量里,在Pa ...
随机推荐
- jquery远程引用地址大全
jquery官方的引用地址,如图: <script typet="text/javascript" src="http://code.jquery.com/jque ...
- 大数据(9) - Flume的安装与使用
Flume简介 --(实时抽取数据的工具) 1) Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. 2) Flume基于流式架构 ...
- 谈谈对XML的理解?说明Web应用中Web.xml文件的作用?
谈谈对XML的理解?说明Web应用中Web.xml文件的作用? 解答:XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard ...
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败解决方案
第一种方法测试过可用:地址:http://download.csdn.net/detail/itjjfamily/8853509 下面是第二种: .NET导出Excel遇到的80070005错误的解决 ...
- java算法-数学之美二
上一章已经说过利用数学思想来解决程序算法问题,实际上就是找规律.这在我们上学时经常遇到,比如给出一段数字,求某一个位置该填写什么数,只要找到规律那就迎刃而解.好了,废话不多说,再来看看案例分析. ...
- iOS开发之 -- oc和swift下输出乘法口诀表
闲来无事,写着玩: oc: //乘法口诀表输出 ; i<=; i++) { ; j<=i; j++) { NSLog(@"%dx%d=%d\n",i,j,i*j); } ...
- python之list去重
问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: 复制代码代码如下: ids = [1,2,3,3,4,2,3,4,5,6,1]news_ids = ...
- python 之re模块(正则表达式) 分组、断言详解
正则表达式分组.断言详解 提示:阅读本文需要有一定的正则表达式基础. 正则表达式中的断言,作为高级应用出现,倒不是因为它有多难,而是概念比较抽象,不容易理解而已,今天就让小菜通俗的讲解一下. 如果 ...
- C语言数据类型大小
数据类型大小是由操作系统和编译器共同决定的,但必须满足: short和int至少为16bit:long至少为32bit: short不能超过int,int不能超过long. 在主流编译器中,32位机和 ...
- Codeforces Round #210 (Div. 1).B
经典的一道DP题. 题目明显是一道DP题,但是比赛的时候一个劲就在想怎么记录状态和转移.最后想到了一种n^3的方法,写了下,不出所料的超时了. 看了别人的代码才发现竟然是先二分然后再进行DP,像这种思 ...