Python基础培训教程

上传人:e****s 文档编号:253206238 上传时间:2024-12-01 格式:PPT 页数:50 大小:161KB
返回 下载 相关 举报
Python基础培训教程_第1页
第1页 / 共50页
Python基础培训教程_第2页
第2页 / 共50页
Python基础培训教程_第3页
第3页 / 共50页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*, /,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Python根本教程,瑞斯康达科技开展股份研发中心,Raisecom Technology Co., Ltd.,刘光光 2021-9-20,Python 简介,Python的官方介绍,Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。,Python的特色,简单 Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。,易学 就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。,免费、开源 Python是FLOSS自由/开放源码软件之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一局部用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。,高层语言 当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。,可移植性 由于它的开源本质,Python已经被移植在许多平台上经过改动使它能够工作在不同平台上。如果你小心地防止使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。,这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC!,2,Python 简介,解释性 一个用编译性语言比方C或C+写的程序可以从源文件即C或C+语言转换到一个你的计算机使用的语言二进制代码,即0和1。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。,而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担忧如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。,面向对象 Python即支持面向过程的编程也支持面向对象的编程。在 面向过程 的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在 面向对象 的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C+和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。,可扩展性 如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的局部程序用C或C+编写,然后在你的Python程序中使用它们。,可嵌入性 你可以把Python嵌入你的C/C+程序,从而向你的程序用户提供脚本功能。,丰富的库 Python标准库确实很庞大。它可以帮助你处理各种工作,包括正那么表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI图形用户界面、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全理念。,除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。,3,常量:如5、1.23、9.25e-3这样的数,或者如同This is a string、“Its a string!这样的字符串,不能改变它的值。,数:在Python中有4种类型的数整数、长整数、浮点数和复数,依次如下:2、1000000、 3.23和52.3E-4、 (-5+4j)和j)。,字符串:使用单引号使用双引号使用三引号或,利用三引号,你可以指示一个多行的字符串,你可以在三引号中自由的使用单引号和双引号。,如: Quote me on this Whats your name?“,This is a multi-line string. This is the first line. This is the second line. Whats your name?, I asked. He said Bond, James Bond. ,根本概念,4,根本概念,转义符,假设你想要在一个字符串中包含一个单引号,就要用到转义符如 Whats your name?。,自然字符串,如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如rNewlines are indicated by n。,变量,仅仅使用字面意义上的常量很快就会引发烦恼我们需要一种既可以储存信息 又可以对它们进行操作的方法。这是为什么要引入 变量 。变量就是我们想要的东西它们的值可以变化,即你可以使用变量存储任何东西。变量只是你的计算机中存储信息的一局部内存。与字面意义上的常量不同,你需要一些能够访问这些变量的方法,因此你给变量名字。,5,根本概念,缩进,空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白空格和制表符用来决定逻辑行的缩进层次,从而用来决定语句的分组。,这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。,你需要记住的一样东西是错误的缩进会引发错误。,如下: SyntaxError: invalid syntax,x=10,def changeString():,global x,x=20,print x-,x,6,运算符,运算符与表达式,运算符,名称,说明,例子,+,加,两个对象相加,3 + 5,得到,8,。,a + b,得到,ab,。,-,减,得到负数或是一个数减去另一个数,-5.2,得到一个负数。,50 - 24,得到,26,。,*,乘,两个数相乘或是返回一个被重复若干次的字符串,2 * 3,得到,6,。,la * 3,得到,lalala,。,*,幂,返回,x,的,y,次幂,3 * 4,得到,81,(即,3 * 3 * 3 * 3,),/,除,x,除以,y,4/3,得到,1,(整数的除法得到整数结果)。,4.0/3,或,4/3.0,得到,1.3333333333333333,/,取整除,返回商的整数部分,4 / 3.0,得到,1.0,%,取模,返回除法的余数,8%3,得到,2,。,-25.5%2.25,得到,1.5,左移,把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即,0,和,1,),2 ,右移,把一个数的比特向右移一定数目,11 1,得到,5,。,11,按比特表示为,1011,,向右移动,1,比特后得到,101,,即十进制的,5,。,7,运算符与表达式,&,按位与,数的按位与,5 & 3,得到,1,。,|,按位或,数的按位或,5 | 3,得到,7,。,按位异或,数的按位异或,5 3,得到,6,按位翻转,x,的按位翻转是,-(x+1),5,得到,6,。,小于,返回,x,是否小于,y,。所有比较运算符返回,1,表示真,返回,0,表示假。这分别与特殊的变量,True,和,False,等价。注意,这些变量名的大写。,5 3,返回,0,(即,False,)而,3 5,返回,1,(即,True,)。比较可以被任意连接:,3 5 ,大于,返回,x,是否大于,y,5 3,返回,True,。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回,False,。,=,小于等于,返回,x,是否小于等于,y,x = 3; y = 6; x =,大于等于,返回,x,是否大于等于,y,x = 4; y = 3; x = y,返回,True,。,=,等于,比较对象是否相等,x = 2; y = 2; x = y,返回,True,。,x = str; y = stR; x = y,返回,False,。,x = str; y = str; x = y,返回,True,。,!=,不等于,比较两个对象是否不相等,x = 2; y = 3; x != y,返回,True,。,not,布尔,“,非,”,如果,x,为,True,,返回,False,。如果,x,为,False,,它返回,True,。,x = True; not y,返回,False,。,and,布尔,“,与,”,如果,x,为,False,,,x and y,返回,False,,否则它返回,y,的计算值。,x = False; y = True; x and y,,由于,x,是,False,,返回,False,。在这里,,Python,不会计算,y,,因为它知道这个表达式的值肯定是,False,(因为,x,是,False,)。这个现象称为短路计算。,or,布尔,“,或,”,如果,x,是,True,,它返回,True,,否则它返回,y,的计算值。,x = True; y = False; x or y,返回,True,。短路计算在这里也适用。,8,运算符与表达式,运算符优先级,下面这个表给出Python的运算符优先级,从最低的优先级最松散地结合到最高的优先级最紧密地结合。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符。,运算符,描述,lambda,Lambda,表达式,or,布尔,“,或,”,and,布尔,“,与,”,not x,布尔,“,非,”,in,,,not in,成员测试,is,,,is not,同一性测试,,,,,=,,,!=,,,=,比较,|,按位或,按位异或,&,按位与,移位,+,,,-,加法与减法,*,,,/,,,%,乘法、除法与取余,+x,,,-x,正负号,x,按位翻转,*,指数,x.attribute,属性参考,xindex,下标,xindex:index,寻址段,f(arguments.),函数调用,(experession,.),绑定或元组显示,expression,.,列表显示,key:datum,.,字典显示,expression,.,字符串转换,9,运算符与表达式,表达式,#!/usr/bin/python# Filename: expression.pylength = 5breadth = 2area = length * breadthprint Area is, areaprint Perimeter is, 2 * (length + breadth),矩形的长度与宽度存储在以它们命名的变量中。我们借助表达式使用它们计算矩形的面积和边长。我们表达式,length * breadth,的结果存储在变量,area,中,然后用,print,语句打印。在另一个打印语句中,我们直接使用表达式,2 * (length + breadth),的值。,10,在Python中有三种控制流语句if、for和while。,if语句,if语句用来检验一个条件, 如果 条件为真,我们运行一块语句称为 if-块 , 否那么 我们处理另外一块语句称为 else-块 。 else 从句是可选的。,例子:,if guess = number:elif guess number:else:,while语句,只要在一个条件为真的情况下,while语句允许你重复执行一块语句。while语句是所谓 循环 语句的一个例子。while语句有一个可选的else从句。,例子:,while running:else:,控制流,11,控制流,for循环,for.in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个工程。,例子:,for i in range(1, 5): print i,#range(1,5)给出序列1, 2, 3, 4,结果:,1,2,3,4,12,break,语句,break,语句是用来,终止,循环语句的,即哪怕循环条件没有称为,False,或序列还没有被完全递归,也停止执行循环语句。,例子:,while True:s = raw_input(Enter something : )if s = quit:break,continue,语句,continue,语句被用来告诉,Python,跳过当前循环块中的剩余语句,然后,继续,进行下一轮循环。,例子:,while True:s = raw_input(Enter something : )if s = quit:breakif len(s) y:print x, is maximumelse:print y, is maximumprintMax(3, 5)print printMax._doc_,结果:,5 is maximumPrints the maximum of two numbers.,The two values must be integers.,17,使用sys模块,import sys sys.path包含输入模块的目录名列表。,字节编译的.pyc文件,输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些。一种方法是创立 字节编译的文件 ,这些文件以.pyc作为扩展名。字节编译的文件与Python变换程序的中间状态有关是否还记得Python如何工作的介绍?。当你在下次从别的程序输入这个模块的时候,.pyc文件是十分有用的它会快得多,因为一局部输入模块所需的处理已经完成了。另外,这些字节编译的文件也是与平台无关的。所以,现在你知道了那些.pyc文件事实上是什么了。,模块,18,模块,from.import语句,如果你想要直接输入argv变量到你的程序中防止在每次使用它时打sys.,那么你可以使用from sys import argv语句。如果你想要输入所有sys模块使用的名字,那么你可以使用from sys import *语句。这对于所有模块都适用。一般说来,应该防止使用from.import而使用import语句,因为这样可以使你的程序更加易读,也可以防止名称的冲突。,from sys import * 或者 from sys import argv 或者 import sys,模块的_name_,每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。这在一个场合特别有用就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。假设我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的_name_属性完成。,例子:,if _name_ = _main_:,19,制造你自己的模块,创立你自己的模块是十分简单的,你一直在这样做!每个Python程序也是一个模块。你已经确保它具有.py扩展名了。下面这个例子将会使它更加清晰。,例8.3 如何创立你自己的模块,#!/usr/bin/python# Filename: mymodule.pydef sayhi(): print Hi, this is mymodule speaking.version = 0.1# End of mymodule.py,上面是一个 模块 的例子。你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来将看看如何在我们别的Python程序中使用这个模块。,记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。,import mymodule from mymodule import *,mymodule.sayhi()print Version, mymodule.version,模块,20,dir(),函数,你可以使用内建的,dir,函数来列出模块定义的标识符。标识符有函数、类和变量。,当你为,dir(),提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参 数,它返回当前模块中定义的名称列表。,例子:,$ python import sys,dir,(sys),# get list of attributes for sys module,_displayhook_, _doc_, _excepthook_, _name_, _stderr_,_stdin_, _stdout_, _getframe, api_version, argv,builtin_module_names, byteorder, call_tracing, callstats,copyright, displayhook, exc_clear, exc_info, exc_type,excepthook, exec_prefix, executable, exit, getcheckinterval,getdefaultencoding, getdlopenflags, getfilesystemencoding,getrecursionlimit, getrefcount, hexversion, maxint, maxunicode,meta_path,modules, path, path_hooks, path_importer_cache,platform, prefix, ps1, ps2, setcheckinterval, setdlopenflags,setprofile, setrecursionlimit, settrace, stderr, stdin, stdout,version, version_info, warnoptions,模块,21,数据结构,数据结构根本上就是它们是可以处理一些 数据 的 结构 。或者说,它们是用来存储一组相关数据的。,在Python中有三种内建的数据结构列表、元组和字典。我们将会学习如何使用它们,以及它们如何使编程变得简单。,列表,list是处理一组有序工程的数据结构,即你可以在一个列表中存储一个 序列 的工程。假想你有一个购物列表,上面记载着你要买的东西,你就容易理解列表了。只不过在你的购物表上,可能每样东西都单独占有一行,而在Python中,你在每个工程之间用逗号分割。,列表中的工程应该包括在方括号中,这样Python就知道你是在指明一个列表。一旦你创立了一个列表,你可以添加、删除或是搜索列表中的工程。由于你可以增加或删除工程,我们说列表是 可变的 数据类型,即这种类型是可以被改变的。,例子:,22,数据结构,shoplist = apple, mango, carrot, banana,print I have,len(,shoplist),items to purchase.print These items are:,# Notice the comma at end of the line,for item in shoplist:print item,print nI also have to buy rice.shoplist.,append,(rice)print My shopping list is now, shoplistprint I will sort my list nowshoplist.,sort,()print Sorted shopping list is, shoplistprint The first item I will buy is, shoplist0olditem = shoplist0,del,shoplist0print I bought the, olditemprint My shopping list is now, shoplist,结果:,I have 4 items to purchase.These items are: apple mango carrot bananaI also have to buy rice.My shopping list is now apple, mango, carrot, banana, riceI will sort my list nowSorted shopping list is apple, banana, carrot, mango, riceThe first item I will buy is appleI bought the appleMy shopping list is now banana, carrot, mango, rice,23,元组,元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割的工程定义。元组通常用在使语句或用户定义的函数能够平安地采用一组值的时候,即被使用的元组的值不会改变。,例子:,zoo = (wolf, elephant, penguin),print Number of animals in the zoo is, len(zoo) print All animals in zoo are, zoo,字典,字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键名字和值详细情况联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。,数据结构,结果:,Number of animals in the zoo is 3,All animals in zoo are (monkey, dolphin, penguin),24,数据结构,结果:,Swaroops address is swaroopchbyteofpython.infoThere are 4 contacts in the address-bookContact Swaroop at swaroopchbyteofpython.infoContact Matsumoto at matzruby-lang.orgContact Larry at larrywall.orgContact Guido at guidopython.orgGuidos address is guidopython.org,ab = Swaroop: swaroopchbyteofpython.info,Larry: larrywall.org,Matsumoto: matzruby-lang.org,Spammer: spammerhotmail print Swaroops address is %s % abSwaroop# Adding a key/value pairabGuido = guidopython.org# Deleting a key/value pairdel abSpammerprint nThere are %d contacts in the address-bookn % len(ab)for name, address in ab.items():print Contact %s at %s % (name, address)if Guido in ab: # OR ab.has_key(Guido)print nGuidos address is %s % abGuido,25,数据结构,序列,列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定工程。切片操作符让我们能够获取序列的一个切片,即一局部序列。,shoplist = apple, mango, carrot, banana# Indexing or Subscription operationprint Item 0 is, shoplist0print Item 1 is, shoplist1print Item 2 is, shoplist2print Item 3 is, shoplist3print Item -1 is, shoplist-1print Item -2 is, shoplist-2# Slicing on a listprint Item 1 to 3 is, shoplist1:3print Item 2 to end is, shoplist2:print Item 1 to -1 is, shoplist1:-1print Item start to end is, shoplist:# Slicing on a stringname = swaroopprint characters 1 to 3 is, name1:3print characters 2 to end is, name2:print characters 1 to -1 is, name1:-1print characters start to end is, name:,结果:,Item 0 is appleItem 1 is mangoItem 2 is carrotItem 3 is bananaItem -1 is bananaItem -2 is carrot,Item 1 to 3 is mango, carrotItem 2 to end is carrot, bananaItem 1 to -1 is mango, carrotItem start to end is apple, mango, carrot, banana,characters 1 to 3 is wacharacters 2 to end is aroopcharacters 1 to -1 is waroocharacters start to end is swaroop,26,数据结构,参考,当你创立一个对象并给它赋一个变量的时候,这个变量仅仅 参考 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。,一般说来,你不需要担忧这个,只是在参考上有些细微的效果需要你注意。这会通过下面这个例子加以说明。,print Simple Assignmentshoplist = apple, mango, carrot, bananamylist = shoplist # mylist is just another name pointing to the same object!del shoplist0print shoplist is, shoplistprint mylist is, mylist# notice that both shoplist and mylist both print the same list without# the apple confirming that they point to the same objectprint Copy by making a full slicemylist = shoplist: # make a copy by doing a full slicedel mylist0 # remove first itemprint shoplist is, shoplistprint mylist is, mylist# notice that now the two lists are different,结果:,Simple Assignmentshoplist is mango, carrot, bananamylist is mango, carrot, bananaCopy by making a full sliceshoplist is mango, carrot, bananamylist is carrot, banana,27,数据结构,更多字符串的内容,我们已经在前面详细讨论了字符串。我们还需要知道什么呢?那么,你是否知道字符串也是对象,同样具有方法。这些方法可以完成包括检验一局部字符串和去除空格在内的各种工作。,你在程序中使用的字符串都是str类的对象。这个类的一些有用的方法会在下面这个例子中说明。如果要了解这些方法的完整列表,请参见help(str),name = Swaroop # This is a string object if name.startswith(Swa):print Yes, the string starts with Swaif a in name:print Yes, it contains the string aif name.find(war) != -1:print Yes, it contains the string wardelimiter = _*_mylist = Brazil, Russia, India, Chinaprint delimiter.join(mylist),结果:,Yes, the string starts with SwaYes, it contains the string aYes, it contains the string warBrazil_*_Russia_*_India_*_China,28,面向对象的编程,到目前为止,在我们的程序中,我们都是根据操作数据的函数或语句块来设计程序的。这被称为 面向过程的 编程。还有一种把数据和功能结合起来,用称为对象的东西包裹起来组织程序的方法。这种方法称为 面向对象的 编程理念。在大多数时候你可以使用过程性编程,但是有些时候当你想要编写大型程序或是寻求一个更加适宜的解决方案的时候,你就得使用面向对象的编程技术。,类和对象是面向对象编程的两个主要方面。类创立一个新类型,而对象这个类的 实例 。这类似于你有一个int类型的变量,这存储整数的变量是int类的实例对象。,类,创立一个类class Person: pass p = Person()print p,结果:,29,面向对象的编程,对象的方法,class Person:def sayHi,(self,):print Hello, how are you?p = Person()p.sayHi(),_init_,方法,在,Python,的类中有很多方法的名字有特殊的重要意义。现在我们将学习,_init_,方法的意义。,_init_,方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的,初始化,。注意,这个名称的开始和结尾都是双下划线。,30,面向对象的编程,类与对象的方法,我们已经讨论了类与对象的功能局部,现在我们来看一下它的数据局部。事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提下有效。,有两种类型的 域 类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。,类的变量 由一个类的所有对象实例共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。,对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。,31,面向对象的编程,#!/usr/bin/python# Filename: objvar.pyclass Person:,Represents a person.,population = 0def _init_(self, name):,Initializes the persons data.,self.name = nameprint (Initializing %s) % self.name,# When this person is created, he/she# adds to the population,Person.population += 1,def _del_(self):,I am dying.,print %s says bye. % self.namePerson.population -= 1if Person.population = 0:print I am the last one.else:print There are still %d people left. % Person.population,32,面向对象的编程,def sayHi(self):,Greeting by the person.Really, thats all it does.,print Hi, my name is %s. % self.namedef howMany(self):,Prints the current population.,if Person.population = 1: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 2 persons here.Hi, my name is Swaroop.We have 2 persons here.Abdul Kalam says bye.There are still 1 people left.Swaroop says bye.I am the last one.,33,面向对象的编程,继承,面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制。继承完全可以理解成类之间的 类型和子类型 关系。,假设你想要写一个程序来记录学校之中的教师和学生情况。他们有一些共同属性,比方姓名、年龄和地址。他们也有专有的属性,比方教师的薪水、课程和假期,学生的成绩和学费。,你可以为教师和学生建立两个独立的类来处理它们,但是这样做的话,如果要增加一个新的共有属性,就意味着要在这两个独立的类中都增加这个属性。这很快就会显得不实用。,一个比较好的方法是创立一个共同的类称为SchoolMember然后让教师和学生的类 继承 这个共同的类。即它们都是这个类型类的子类型,然后我们再为这些子类型添加专有的属性。,使用这种方法有很多优点。如果我们增加/改变了SchoolMember中的任何功能,它会自动地反映到子类型之中。例如,你要为教师和学生都增加一个新的身份证域,那么你只需简单地把它加到SchoolMember类中。然而,在一个子类型之中做的改动不会影响到别的子类型。另外一个优点是你可以把教师和学生对象都作为SchoolMember对象来使用,这在某些场合特别有用,比方统计学校成员的人数。一个子类型在任何需要父类型的场合可以被替换成父类型,即对象可以被视作是父类的实例,这种现象被称为多态现象。,34,面向对象的编程,#!/usr/bin/python# Filename: inherit.pyclass SchoolMember:,Represents any school member.,def _init_(self, name, age):self.name = nameself.age = ageprint (Initialized SchoolMember: %s) % self.namedef tell(self):,Tell my details.,print Name:%s Age:%s % (self.name, self.age),class Teacher(SchoolMember):,Represents a teacher.,def _init_(self, name, age, salary):SchoolMember._init_(self, name, age)self.salary = salaryprint (Initialized Teacher: %s) % self.namedef tell(self):SchoolMember.tell(self)print Salary: %d % self.salary,35,面向对象的编程,class Student(SchoolMember):,Represents a student.,def _init_(self, name, age, marks):SchoolMember._init_(self, name, age)self.marks = marksprint (Initialized Student: %s) % self.namedef tell(self):SchoolMember.tell(self)print Marks: %d % self.markst = Teacher(Mrs. Shrividya, 40, 30000)s = Student(Swaroop, 22, 75)print,# prints a blank line,members = t, sfor member in members:member.tell(),# works for both Teachers and Students,结果:,(Initialized SchoolMember: Mrs. Shrividya)(Initialized Teacher: Mrs. Shrividya)(Initialized SchoolMember: Swaroop)(Initialized Student: Swaroop)Name:Mrs. Shrividya Age:40 Salary: 30000Name:Swaroop Age:22 Marks: 75,36,输入/输出,文件,你可以通过创立一个file类的对象来翻开一个文件,分别使用file类的read、readline或write方法来恰当地读写文件。对文件的读写能力依赖于你在翻开文件时指定的模式。最后,当你完成对文件的操作的时候,你调用close方法来告诉Python我们完成了对文件的使用。,例子:,poem = Pr
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!