#type() 来判断对象类型#判断基本数据类型可以直接写int,str等print(type(123)==type(456))#判断一个对象是否是函数怎么办?可以使用types模块中定义的常量:importtypestype(abs)==types.BuiltinFunctionType''' 使用dir() 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法: '''print(dir('ABC'))classStudent(object):def__int__(self,name):self.name=name#s = Student('Bob')#s.score = 90classStudent(object):name='Student's=Student()# 创建实例s#print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性s.name='Michael'# 给实例绑定name属性#print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性#print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问dels.name# 如果删除实例的name属性print(s.name)# 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了#为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:classStudent(object):count=0def__init__(self,name):self.name=name Student.count+=1# 测试:ifStudent.count!=0:print('测试失败!')else:bart=Student('Bart')ifStudent.count!=1:print('测试失败!')else:lisa=Student('Bart')ifStudent.count!=2:print('测试失败!')else:print('Students:',Student.count)print('测试通过!')#把Student的gender属性改造为枚举类型,可以避免使用字符串:fromenumimportEnum,unique# 定义性别枚举classGender(Enum):Male=0Female=1# 定义学生类classStudent(object):def__init__(self,name,gender):self.name=name# 关键:检查传入的 gender 是否属于 Gender 枚举类型ifnotisinstance(gender,Gender):raiseValueError("gender must be an instance of Gender enum")self.gender=gender# 测试代码# 1. 正确的用法bart=Student('Bart',Gender.Male)ifbart.gender==Gender.Male:print('测试通过!')# 2. 错误的用法(会被拦截)try:# 这里试图用字符串,会抛出异常alice=Student('Alice','Male')exceptValueErrorase:print(f'错误被捕获:{e}')#异常try:print('try...')r=10/2print('result:',r)exceptZeroDivisionErrorase:print('except:',e)finally:print('finally...')print('END')try:print('try...')r=10/int('2')print('result:',r)exceptValueErrorase:print('ValueError:',e)exceptZeroDivisionErrorase:print('ZeroDivisionError:',e)else:print('no error!')finally:print('finally...')print('END----')try:print('try...')r=10/int('2')print('result:',r)exceptValueErrorase:print('ValueError:',e)exceptZeroDivisionErrorase:print('ZeroDivisionError:',e)else:print('no error!')finally:print('finally...')print('END')# err.py:'''def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): bar('0') main() '''#同样是出错,但程序打印完错误信息后会继续执行,并正常退出:importloggingdeffoo(s):return10/int(s)defbar(s):returnfoo(s)*2defmain():try:bar('0')exceptExceptionase:logging.exception(e)main()print('END')''' def foo(s): n = int(s) if n==0: raise ValueError('invalid value: %s' % s) return 10 / n def bar(): try: foo('0') except ValueError as e: print('ValueError!') raise bar() try: 10 / 0 except ZeroDivisionError: raise ValueError('input error!') #运行下面的代码,根据异常信息进行分析,定位出错误源头,并修复: from functools import reduce def str2num(s): try: # 尝试转换为数字 return float(s) except ValueError as e: # 如果转换失败,抛出带有更详细信息的异常 raise ValueError(f"无法将 '{s.strip()}' 转换为数字") from e def calc(exp): try: ss = exp.split('+') # 将 map 对象转换为列表,以便立即触发 str2num 的执行和异常 ns = list(map(str2num, ss)) return reduce(lambda acc, x: acc + x, ns) except ValueError as e: # 捕获并处理 str2num 中抛出的 ValueError print(f"计算表达式 '{exp}' 时出错: {e}") return None # 或者返回一个默认值,如 0 def main(): # 测试有效的表达式 r = calc('100 + 200 + 345') if r is not None: print('100 + 200 + 345 =', r) # 测试包含无效数字的表达式 r = calc('99 + 88 + 7.6.7') # 注意:这里故意写错了,多了一个点 if r is not None: print('99 + 88 + 7.6.7 =', r) # 测试另一个有效表达式,证明程序没有崩溃 r = calc('10 + 20 + 30') if r is not None: print('10 + 20 + 30 =', r) main() '''importloggingdeffoo(s):n=int(s)logging.info('n = %d'%n)logging.basicConfig(level=logging.INFO)return10/ndefmain():foo('0')main()Python对象和实例属性
张小明
前端开发工程师
CosyVoice GPU 入门实战:从零搭建高效语音处理流水线
最近在做一个语音处理的实时应用,发现用传统的CPU方案处理音频流时,延迟总是下不来,尤其是在做降噪和特征提取的时候,CPU占用率直接拉满,吞吐量却上不去。这让我开始寻找GPU加速的方案,最终把目光投向了Cos…
如何通过Path of Building PoE2优化流放之路2角色构建:从规划到实战的完整方案
如何通过Path of Building PoE2优化流放之路2角色构建:从规划到实战的完整方案 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 痛点解析:流放之路2角色构建的三大核心挑战 在《流…
【51单片机】【Proteus仿真】基于138与595芯片的16x16点阵屏动态显示系统
1. 项目开篇:为什么选择这个16x16点阵屏项目? 如果你刚开始接触51单片机,可能玩过LED流水灯,也试过数码管显示,感觉挺有意思,但总觉得少了点“大场面”。这时候,一个能显示汉字、简单图形甚至动…
无需Root也能玩转Xposed?NPatch框架让Android模块化体验更自由
无需Root也能玩转Xposed?NPatch框架让Android模块化体验更自由 【免费下载链接】NPatch NPatch是一个复刻自LSPatch,以LSPosed为基础的免root的Xposed框架 项目地址: https://gitcode.com/gh_mirrors/np/NPatch 当你新买的Android手机因厂商限制无…
Evernote笔记备份终极指南:从数据依赖到完全掌控
Evernote笔记备份终极指南:从数据依赖到完全掌控 【免费下载链接】evernote-backup Backup & export all Evernote notes and notebooks 项目地址: https://gitcode.com/gh_mirrors/ev/evernote-backup 在数字笔记日益成为工作生活核心的今天,…
Outfit Fonts:现代品牌视觉系统的开源字体解决方案
Outfit Fonts:现代品牌视觉系统的开源字体解决方案 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts Outfit Fonts是一款专为品牌自动化设计打造的现代几何无衬线字体,作为开…