-
python中JSON字符串与字典数据的互相转换:一. json 转换为字典1. 使用json模块的loads函数,该函数通过参数传入json字符串,然后返回与该字符串对应的字典。2. 使用eval函数将json格式字符串当做普通的Python代码执行,eval函数会直接返回与json格式字符串对应的字典。二.字典转换为json1.使用json模块的dumps函数,该函数通过参数传入字典,然后返回与改字典对应的json格式字符串。首先会将名为data的字典转换为字符串,然后将json字符串s通过eval函数转换为字典最后从products.json文件中读取json字符串,并使用loads函数和eval函数两种方法将json字符串转换为字典。vi demo.py#练习从字典转换为jsonimport jsondata = { 'name':'Bill', 'company':'Microsoft', 'age':34 }# 将字典转换为json字符串jsonstr = json.dumps(data)print(type(jsonstr))print(jsonstr)运行结果:<class 'str'>{"name": "Bill", "company": "Microsoft", "age": 34}# 将json字符串转换为字典data = json.loads(jsonstr)print(type(data))print(data)运行结果:<class 'dict'>{'name': 'Bill', 'company': 'Microsoft', 'age': 34}# 定义一个json字符串,使用eval函数将json字符串转换为字典s = '''{ 'name':'Bill', 'company':'Microsoft', 'age':20}'''data = eval(s)print(type(data))print(data)print(data['company'])运行结果:<class 'dict'>{'name': 'Bill', 'company': 'Microsoft', 'age': 20}Microsoft#读一个json格式文件,将json数据用两种方法转换为字典列表f = open('p.json','r',encoding='utf-8')jsonStr = f.read()json1 = eval(jsonStr)json2 = json.loads(jsonStr)print(json1)print(type(json1))print(json2)print(type(json2))print(json2[1]['name'])运行结果:[{'name': 'iPhone13', 'price': 9999.9, 'count': 2000}, {'name': '吉利', 'price': 1000000, 'count': 123}]<class 'list'>[{'name': 'iPhone13', 'price': 9999.9, 'count': 2000}, {'name': '吉利', 'price': 1000000, 'count': 123}]<class 'list'>吉利user@cyyxzuk0hs7mxjv-machine:~/ghj-1635423305223$
-
python将xml文件转换为字典使用xmltodict模块。vi demo.pyimport xmltodictf = open('files/products.xml','rt',encoding='utf-8')xml = f.read()d = xmltodict.parse(xml)#print(d)for v in d['root']['products']['product']: print('uuid',':',v['@uuid']) print('id',':',v['id']) print('name',':',v['name']) print('price',':',v['price']) print('---------')print(d['root']['products']['product'][0]['@uuid'])import pprint #引入pprint模块可读格式化输出字典数据pp = pprint.PrettyPrinter(indent=4)pp.pprint(d)使用cloudIDE运行demo.py:user@u4ft68gtp8ygqp8-machine:~/sdfsadf-1635320736190$ /usr/bin/python /home/user/sdfsadf-1635320736190/demo.pyuuid : 1234id : 10000name : iPhone9price : 9999---------uuid : 4321id : 20000name : 特斯拉price : 1000000---------uuid : 5678id : 30000name : Mac Proprice : 40000---------1234OrderedDict([ ( 'root', OrderedDict([ ( 'products', OrderedDict([ ( 'product', [ OrderedDict([ ( '@uuid', '1234'), ( 'id', '10000'), ( 'name', 'iPhone9'), ( 'price', '9999')]), OrderedDict([ ( '@uuid', '4321'), ( 'id', '20000'), ( 'name', '特斯拉'), ( 'price', '1000000')]), OrderedDict([ ( '@uuid', '5678'), ( 'id', '30000'), ( 'name', 'Mac ' 'Pro'), ( 'price', '40000')])])]))]))])user@u4ft68gtp8ygqp8-machine:~/sdfsadf-1635320736190$
-
python将字典数据转换为XML字符串;用到dicttoxml模块,需要安装后使用。dict -> xml字符串,格式化xml字符串,然后写入到persons.xml文件当中。vi demo.pyimport dicttoxmlfrom xml.dom.minidom import parseStringimport os# 定义一个字典数组d = [20,'names',{'name':'Bill','age':30,'salary':2000}, {'name':'李宁','age':123,'salary':20004}, {'name':'John','age':20,'salary':1234}] # 将字典转换为XML格式(bytes形式)bxml = dicttoxml.dicttoxml(d, custom_root = 'persons') #模块中的同名函数#print(bxml)xml = bxml.decode('utf-8') #将代码使用utf-8解析#print(xml)# 解析xml字符串为可读的格式化输出dom = parseString(xml)prettyxml = dom.toprettyxml(indent = ' ')print(prettyxml)os.makedirs("files", exist_ok = True)f = open('files/persons.xml','w',encoding='utf-8')f.write(prettyxml)f.close()使用cloudIDE运行demo.py,python环境需要首先安装dicttoxml:user@gwvm2a1fnntuar8-machine:~/sdf-1635319411781$ pip install dicttoxmlDefaulting to user installation because normal site-packages is not writeableLooking in indexes: https://repo.huaweicloud.com/repository/pypi/simpleLooking in links: https://obs-workspace-20180810.obs.cn-north-1.myhuaweicloud.com/pypi/index.htmlCollecting dicttoxml Downloading https://repo.huaweicloud.com/repository/pypi/packages/74/36/534db111db9e7610a41641a1f6669a964aacaf51858f466de264cc8dcdd9/dicttoxml-1.7.4.tar.gz (18 kB)Building wheels for collected packages: dicttoxml Building wheel for dicttoxml (setup.py) ... done Created wheel for dicttoxml: filename=dicttoxml-1.7.4-py3-none-any.whl size=17463 sha256=be43aebf0e7ea56c138ebf2e1bf14f0b15a81fb0155ad8b6ea84d408475b8cf1 Stored in directory: /home/user/.cache/pip/wheels/de/80/18/aecfd193b0578b272c933f413c05b21f693bbc47cb1cc7f1ddSuccessfully built dicttoxmlInstalling collected packages: dicttoxmlSuccessfully installed dicttoxml-1.7.4WARNING: You are using pip version 21.2.4; however, version 21.3 is available.You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.运行demo.pyuser@gwvm2a1fnntuar8-machine:~/sdf-1635319411781$ /usr/bin/python /home/user/sdf-1635319411781/demo.py<?xml version="1.0" ?><persons> <item type="int">20</item> <item type="str">names</item> <item type="dict"> <name type="str">Bill</name> <age type="int">30</age> <salary type="int">2000</salary> </item> <item type="dict"> <name type="str">李宁</name> <age type="int">123</age> <salary type="int">20004</salary> </item> <item type="dict"> <name type="str">John</name> <age type="int">20</age> <salary type="int">1234</salary> </item></persons>user@gwvm2a1fnntuar8-machine:~/sdf-1635319411781$ 生成的文件files/person.xml<?xml version="1.0" ?><persons> <item type="int">20</item> <item type="str">names</item> <item type="dict"> <name type="str">Bill</name> <age type="int">30</age> <salary type="int">2000</salary> </item> <item type="dict"> <name type="str">李宁</name> <age type="int">123</age> <salary type="int">20004</salary> </item> <item type="dict"> <name type="str">John</name> <age type="int">20</age> <salary type="int">1234</salary> </item></persons>
-
products.xml文件内容:<root> <products> <product uuid='1234'> <id>10000</id> <name>iPhone9</name> <price>9999</price> </product> <product uuid='4321'> <id>20000</id> <name>特斯拉</name> <price>1000000</price> </product> <product uuid='5678'> <id>30000</id> <name>Mac Pro</name> <price>40000</price> </product> </products></root>vi demo.py# 读取与检索XML文件from xml.etree.ElementTree import parsedoc = parse('products.xml') #读取整个文件的句柄for item in doc.iterfind('products/product'): #解析单个产品 # 读取id节点的值 id = item.findtext('id') # 读取name节点的值 name = item.findtext('name') # 读取price节点的值 price = item.findtext('price') #uuid = item.get('uuid') print('uuid','=', item.get('uuid')) print('id','=',id) print('name','=',name) print('price','=',price) print('-----------------') 使用cloudIDE运行结果:user@a2ns6m9d57dyrps-machine:~/sdf-1635317644253$ /usr/bin/python /home/user/sdf-1635317644253/demo.pyuuid = 1234id = 10000name = iPhone9price = 9999-----------------uuid = 4321id = 20000name = 特斯拉price = 1000000-----------------uuid = 5678id = 30000name = Mac Proprice = 40000-----------------user@a2ns6m9d57dyrps-machine:~/sdf-1635317644253$
-
字典是数据的无序集合,用于存储数据值。与其他仅将单个值作为项的数据类型不同,字典具有键-值对。字典中的键和值之间用冒号“:”分隔字典的三种赋值操作x = {'food':'Spam', 'quantity':4, 'color':'pink'} X =dict(food='Spam', quantity=4, color='pink') x = dict([("food", "Spam"),("b", "2"), ("color", "pink")]) dict.copy():拷贝数据d =x.copy() d['color'] = 'red' print(x) # {'food':'Spam','quantity':4,'color':'pink'} print(d) # {'food':'Spam','quantity':4,'color':'red'} 元素访问 print(d.get('name')) # 输出None print(d.get('name', '键值不存在!')) # 输出 键值不存在 print(d.keys()) # 输出dict_keys(['food', 'quantity', 'color']) print(d.values()) # 输出dict_values(['Spam', 4, 'pink']) print(d.items()) 输出 dict_items([('food', 'Spam'), ('quantity', 4), ('color', 'pink')])d.clear() # 清空字典中的所有数据 print(d) # 输出 {} del(d) # 删除字典 print(d) # 程序异常,提示“d”未定义
-
python中的列表是一个功能强大的集合,用中括号表示。列表的数据类型可以不一样,可以列表中包含列表。下面将列表的相关知识用代码展示一下:animals = ['cat', 'dog', 'monkey'] # list.append(obj):在列表末尾添加新的对象。 animals.append('fish') # 追加元素 print(animals) # 输出 ['cat', 'dog', 'monkey', ‘fish’] # list.remove(obj):移除列表中某个值的第一个匹配项。 animals.remove('fish') # 删除元素fish print(animals) # 输出 ['cat', 'dog', 'monkey'] # list.insert(index, obj):用于将指定对象插入列表的指定位置。index:插入位置 animals.insert(1,'fish') # 在下标1的地方插入元素fish print(animals) # 输出 ['cat', ‘fish’, 'dog', 'monkey'] # list.pop([index=-1]):要移除列表中对下标对应的元素(默认是最后一个)。Index:下标 animals.pop(1) # 删除下标为1的元素 print(animals) # 输出 ['cat', 'dog', 'monkey'] #遍历并获取元素和对应索引 # enumerate(sequence) :将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 for i in enumerate(animals): print(i) # 元素下标和元素所组成的索引 #输出:(0, cat) # (1, dog) # (2, monkey) #列表推导式 squares = [x*2 for x in animals] # 批量生成符合规则的元素组成的列表 print(squares) #['catcat ', 'dogdog ', 'monkeymonkey '] list1 = [12, 45, 32, 55] # list.sort(cmp=None, key=None, reverse=False):cmp为可选参数, 如果指定了该参数,会使用该参数的方法进行排序。key是用来进行比较的元素。reverse为排序规则,False为升序。 list1.sort() # 对列表进行排序 print(list1) # 输出[12, 32, 45, 55] # list.reverse():反向列表中元素。 list1.reverse() # 对列表进行逆置 print(list1) # 输出[55, 45, 32, 12]
-
关于Python的面试经验一般来说,面试官会根据求职者在简历中填写的技术及相关细节来出面试题。一位拿了大厂技术岗Special Offer的网友分享了他总结的面试经验。当时,面试官根据他在简历中所写的技术,面试题出的范围大致如下:· 数据类型有几种、有什么区别· 进程、线程、协程的定义及区别·深浅拷贝的区别· 常用开发模式·函数式编程、对象式编程· 闭包、装饰器· 垃圾回收机制· linux常用命令,举例说明1、如何在Python中管理内存?Python中的内存管理由Python私有堆空间管理。对象和数据结构位于私有堆中,开发者无权访问此私有堆,是Python解释器负责处理的。Python对象的堆空间分配由内存管理器完成。核心API提供了一些开发者编写代码的工具。Python内置的垃圾回收器会回收使用所有的未使用内存,使其适用于堆空间。2、解释Python中的Help()函数和Dir()函数。Help()函数是一个内置函数,作用是查看函数和详细说明模块用途。运行结果是:Dir()函数是Python内置函数,Dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。举个例子展示其使用方法:运行结果是:3、当Python退出时,是否会清除所有分配的内存?答案是否。当Python退出时,对其他对象具有循环引用的Python模块,以及从全局名称空间引用的对象不会被解除分配或释放。无法解除分配C库保留的那些内存部分。退出时,由于拥有自己的高效清理机制,Python会尝试取消分配/销毁其他所有对象。4、什么是猴子补丁?在运行期间动态修改一个类或模块。运行结果是:5、Python中的字典是什么?字典指的是Python中的内置数据类型。它定义了键和值之间的一对一关系,包含了一对键及其对应的值。字典由键索引。6、解释一下Python中的逻辑运算符。Python中有3个逻辑运算符:and,or,not。7、为什么不建议以下划线作为标识符的开头?Python没有私有变量的概念,所以约定速成以下划线为开头来声明一个变量为私有。如果不想让变量私有,则不要使用下划线开头。8、什么是Flask?Flask是Python编写的一款轻量级Web应用框架。WSGI 工具箱采用 Werkzeug ,模板引擎使用 Jinja2。Flask使用 BSD 授权。Werkzeug和Jinja2是其中的两个环境依赖。Flask不需要依赖外部库。9、解释Python中的join()和split()函数。Join()可用于将指定字符添加至字符串中。运行结果是:Split()可用于指定字符分割字符串。运行结果是:10、Python中的标识符长度有多长?标识符可以是任意长度。在命名标识符时还必须遵守以下规则:· 只能以下划线或者 A-Z/a-z 中的字母开头· 其余部分可以使用 A-Z/a-z/0-9· 区分大小写· 关键字不能作为标识符11、Python中是否需要缩进?需要。Python指定了一个代码块。循环,类,函数等中的所有代码都在缩进块中指定。通常使用四个空格字符来完成。如果开发者的代码没有缩进,Python将无法准确执行并且也会抛出错误。12、请解释使用*args的含义。当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args。运行结果是:13、深拷贝和浅拷贝之间的区别是什么?浅拷贝是将一个对象的引用拷贝到另一个对象上,如果在拷贝中改动,会影响到原对象。深拷贝是将一个对象拷贝到另一个对象中,如果对一个对象的拷贝做出改变时,不会影响原对象。14、Python中如何实现多线程?Python是多线程语言,其内置有多线程工具包。多线程能让我们一次执行多个线程。Python中的GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下个线程之前执行一些操作,看上去像并行运行的错觉。事实上是线程在CPU上轮流运行。所有的传递会增加程序执行的内存压力。15、Python中的闭包是什么?当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包。其意义就是会记录这个值。比如:运行结果是:16、Python的优势有哪些?· Python 易于学习· 完全支持面向对象· 高效的高级数据结构,可用少量代码构建出多种功能· 拥有最成熟的程序包资源库之一· 跨平台而且开源17、什么是元组的解封装?首先,我们先展示解封装:将 3,4,5 封装到元组 mytuple 中,再将值解封装到变量 x,y,z 中:得到结果为12。18、什么是PEP?PEP代表Python Enhancement Proposal,是一组规则,指定如何格式化Python代码以获得最大可读性。19、列表和元组之间的区别是什么?主要区别是列表是可变的,元组是不可变的。比如以下举例:会出现以下报错:20、什么是Python模块?Python中有哪些常用的内置模块?Python模块是包含Python代码的.py文件。此代码可以是函数类或变量。常用的内置模块包括:random、data time、JSON、sys、math等。
-
练习题:编写一个Python程序,从当前目录的文本文件words.txt中读取所有的内容(全都是英文单词),并统计其中每一个英文单词出现的次数。单词之间用逗号(,)、分号(;)或空格分隔,也可能是这3个分隔符一起分隔单词。将统计结果保存到字典中,并输出统计结果。假设words.txt文件的内容如下:test star test star star;bus test bill,new yeah bill,book bike God start python whatvi demo.pyimport ref = open('words.txt','r')words = f.read()wordList = re.split('[ ,;]+',words)print(wordList)countDict = {}for word in wordList: if countDict.get(word) == None: countDict[word] = 1 else: countDict[word] = int(countDict[word]) + 1for (key,value) in countDict.items(): print(key,'=',value) f.close()用CloudIDE打开一个项目,新建上面的demo.py和words.txt。运行结果:user@wvvmphyg0xg5h3c-machine:~/ghj-1635257235820$ /usr/bin/python /home/user/ghj-1635257235820/demo.py['test', 'star', 'test', 'star', 'star', 'bus', 'test', 'bill', 'new', 'year', 'bill', 'book', 'bike', 'God', 'start', 'python', 'what']test = 3star = 3bus = 1bill = 2new = 1year = 1book = 1bike = 1God = 1start = 1python = 1what = 1user@wvvmphyg0xg5h3c-machine:~/ghj-1635257235820$常见的热词统计。
-
这是李宁老师的python文件和流使用章节的课后习题,用星号生成菱形,只是这里要求写入文件。vi demo.py#编写一个Python程序,从控制台输入一个奇数,然后生成奇数行的星号(*)菱形,并将该菱形保存到当前目录下的stars.txt文件中。line = input('请输入行数(必须是奇数):')line = int(line)if line % 2 != 0: f = open('stars.txt','w') import os spaceNum = line // 2 # 每行的最大空格数 i = 1 lineSpaceNum = spaceNum # 当前行的前后空格数 # 生成上三角形 while lineSpaceNum >= 0: f.write(' ' * lineSpaceNum) f.write('*' * (2 * i - 1)) f.write(' ' * lineSpaceNum + os.linesep) lineSpaceNum -= 1 i += 1 i -= 2 lineSpaceNum += 2 # 生成下三角形 while lineSpaceNum <= spaceNum: f.write(' ' * lineSpaceNum) f.write('*' * (2 * i - 1)) f.write(' ' * lineSpaceNum + os.linesep) lineSpaceNum += 1 i -= 1 f.close()else: print('必须输入奇数')应用cloudIDE的环境运行练习:me/user/phoenix-sample-1635252861617/demo.pye-1635252861617$ /usr/bin/python /hom请输入行数(必须是奇数):3user@n8tsvesj6aczqi2-machine:~/phoenix-sample-1635252861617$ /usr/bin/python /home/user/phoenix-sample-1635252861617/demo.py请输入行数(必须是奇数):21user@n8tsvesj6aczqi2-machine:~/phoenix-sample-1635252861617$
-
python文件和流练习,使用FileInput对象读取文件vi demo.pyimport fileinputfileobj = fileinput.input('./url.txt')print(type(fileobj))print(fileobj.readline().rstrip())for line in fileobj: #line = line.rstrip() if line !='': print(fileobj.lineno(),':',line) else: print(fileobj.filename())运行结果:user@e7q53zougr2la7e-machine:~/sdf-1635251478816$ /usr/bin/python /home/user/sdf-1635251478816/demo.py<class 'fileinput.FileInput'>http://www.baidu.com2 : https://www.jd.com3 : https://www.hao123.com4 : http://www.sohu.comuser@e7q53zougr2la7e-machine:~/sdf-1635251478816$ 这里遇到一个问题:readline()执行完,会将读完的行移出fileobj对象,后面的for循环读出的就是剩余的行。
-
python文件操作整行读写练习vi demo.py# 读行与写行import osf = open('./url.txt', 'r+')url = ''while True: url = f.readline() url = url.rstrip() if url == '': break; else: print(url)print('--------------')f.seek(0)print(f.readlines())f.write(os.linesep+'http://baidu.com' + os.linesep)f.close()f = open("./url.txt", 'a+')urlList = ['https://google.com' + os.linesep,'https://jd.com' + os.linesep]f.writelines(urlList)f.close()运行结果:user@yz0dz02025kev6h-machine:~/ghj-1635174013674$ /usr/bin/python /home/user/ghj-1635174013674/demo.pyhttps://123.com--------------['https://123.com\n']user@yz0dz02025kev6h-machine:~/ghj-1635174013674$ 文件 url.txt内容:https://123.comhttp://baidu.comhttps://google.comhttps://jd.com
-
python文件读写管道输出练习:vi demo1.py'''管道输出 | 从标准输入读取所有的数据,并按行将数据保存到列表中,然后过滤出所有包含“demo”的行,并输出这些行ls -al | python demo1.pysort'''import sysimport osimport re# 从标准输入读取全部数据text = sys.stdin.read()files = text.split(os.linesep)for file in files: result = re.match('.*demo*',file) if result != None: print(file) 运行结果:user@uht0ff7cqwm3wk0-machine:~/ghj-1635172373079$ ls -al | python demo1.py-rw-r--r-- 1 user user 439 Oct 25 22:42 demo1.py-rw-r--r-- 1 user user 0 Oct 25 22:41 demo2.txt-rw-r--r-- 1 user user 0 Oct 25 22:42 demo3.pyuser@uht0ff7cqwm3wk0-machine:~/ghj-1635172373079$ 搜噶,这样以后就可以批量处理日志文件拉取告警之类的了。
-
python文件的打开方式常用的有5种:r:只读文件。w:写文件。r+:文件可读写,如果文件不存在,会抛出异常。如果文件存在,会从当前位置开始写入新内容,通过seek()可以改变当前文件的位置,也就是移动文件的指针。w+:文件可读写,如果文件不存在,会创建一个新文件;如果文件存在,会清空整个文件,并写入新内容。a+:文件可读写,如果文件不存在,会创建一个新文件;如果文件存在,会将要写入的内容添加到原文件的最后。也就是说,使用a+打开已经存在的文件,文件指针已经在文件的结尾了write(string):向文件写入内容,该函数会返回写入文件的字节数。read([n]):读取文件的内容,n是一个整数,表示从文件指针指定的位置开始读取的n个字节。如果不指定n,该函数会读取从当前位置往后的所有的字节。该函数会返回读取的数据。seek(n):重新设置文件指针,也就是改变文件的当前位置。如果使用write函数写入内容后需要使用seek(0)重置文件指针。close():关闭文件,对文件进行读写操作后,关闭文件是一个好习惯。vi demo1.py# 以写模式打开test1.txt文件f = open('./files/test1.txt','w')# 向test1.txt文件中写入“I love ”“python”print(f.write("I love "))print(f.write("python"))f.close();f = open('./files/test1.txt','r')print(f.read(7))print(f.read(6))f.close();try: f = open('./files/test2.txt','r+') #打开一个不存在的文件,抛出异常except Exception as e: print(e)# a+f = open('./files/test2.txt', 'a+')print(f.write('hello'))f.close();f = open('./files/test2.txt','a+')print('-----1------')print(f.read()) #已经在文件尾,读出空f.seek(0) #指针移动至开头print('-----2------')print(f.read()) #读出全部内容f.close()# w+try: f = open('./files/test2.txt','w+') print(f.read()) f.write('How are you?') f.seek(0) print(f.read())finally: f.close();执行结果:user@zsxyx1uggjsv8cj-machine:~/ghj-1635170591718$ /usr/bin/python /home/user/ghj-1635170591718/demo1.py76I love python[Errno 2] No such file or directory: './files/test2.txt'5-----1-----------2------helloHow are you?user@zsxyx1uggjsv8cj-machine:~/ghj-1635170591718$
-
使用super函数,可以在子类实例中直接调用父类的方法。下面练习一个实例:vi demo03.pyclass Bird: def __init__(self): self.hungry = True print('Bird的构造方法') def eat(self): if self.hungry: print('已经吃了虫子') self.hungry = False else: print('已经吃过了')b = Bird()b.eat()b.eat()class SongBird(Bird): def __init__(self): super().__init__() #使用super()函数调用父类的构造函数。 self.sound = '唱歌' print('SongBird的构造方法') def sing(self): super().eat() print(self.sound)sb = SongBird()sb.sing()sb.eat()print("---------------")class MyClass0: def __init__(self): print('MyClass0')class MyClass1(MyClass0): def __init__(self): print('MyClass1') class MyClass2(MyClass1): def __init__(self): print('MyClass2')class MyClass3(MyClass2): def __init__(self): print('MyClass3') super(MyClass1,self).__init__() #super()有两个参数,第一个参数是引用的类,第二个是所在的实例。m = MyClass3()运行结果,sb.eat()已经不报错了。9/demo03.py2us30-machine:~/ghj-1634805525109$ python /home/user/ghj-1634805525109Bird的构造方法已经吃了虫子已经吃过了Bird的构造方法SongBird的构造方法已经吃了虫子唱歌已经吃过了---------------MyClass3MyClass0user@ilgqw02us30-machine:~/ghj-1634805525109$
-
代码取自李宁老师的培训课程。python 类的构造方法以左右两个下划线为界,固定命名为init方法。子类可以继承自父类,重写普通方法和构造方法;如果子类B和父类A的方法名一样,那么调用子类的实例的同名方法名,并不像java会自动适配参数类型和个数,也就是不会考虑参数不同的方法。实例1:vi demo02.pyclass Bird: def __init__(self): self.hungry = True print('Bird的构造方法') def eat(self): if self.hungry: print('还没吃虫子,开始吃虫子') self.hungry = False else: print('已经吃过了')b = Bird()b.eat()b.eat()class SongBird(Bird): def __init__(self): self.sound = '唱歌' print('SongBird的构造方法') def sing(self): print(self.sound) def eat(self,thing): print(thing)sb = SongBird()sb.sing()sb.eat("虫子")运行结果:ser@mj53s0zdl98-machine:~/ghj-1634802506020$ /usr/bin/python /home/user/ghj-1634802506020/demo02.pyBird的构造方法还没吃虫子,开始吃虫子已经吃过了SongBird的构造方法唱歌虫子如果不重写eat(),运行结果会报错,因为父类构造函数需要hungry,子类重写了构造函数,所以父类的构造函数不执行,就没有hungry参数:4803595898/demo02.pyhine:~/ghj-1634803595898$ /usr/bin/python /home/user/ghj-1634Bird的构造方法还没吃虫子,开始吃虫子已经吃过了SongBird的构造方法唱歌Traceback (most recent call last): File "/home/user/ghj-1634803595898/demo02.py", line 28, in <module> sb.eat() File "/home/user/ghj-1634803595898/demo02.py", line 11, in eat if self.hungry:AttributeError: 'SongBird' object has no attribute 'hungry'user@oejtkh9lbks-machine:~/ghj-1634803595898$
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签