1.需要打印的方法,可以使用静态方法。
def 静态方法名():
pass
静态方法需要修饰器@staticmethod来标识,告诉解释器这是一个静态方法
通过类名调用静态方法
使用示范:
#!/usr/bin/python3#coding=utf-8
classTool(object):#使用赋值语句,定义类属性,记录创建工具对象的总数
def __init__(self, name):
self.name=name
Tool.count+= 1@staticmethoddefshow_class_function():print("I am a staticmethod")#创建工具对象
tool1 = Tool("斧头")
tool2= Tool("榔头")
tool3= Tool("铁锹")
Tool.show_class_function()
View Code
2.单例模式:让类创建对象,在系统中只有唯一的一个实例
单例模式每次执行类名返回的对象,都是内存地址相同的
使用类名创建对象时,python的解释器首先会调用__new__方法为对象分配空间。
关于__new__方法(一个内置静态方法)作用:
1)为内存分配空间
2)返回对象的引用
python解释器获得对象引用以后将作为第一个参数传递给__init__方法
关于重写__new__方法:
1)重写以后一定要返回return super.__new__(cls)
__new__是一个静态方法,调用时需要主动传递cls参数
如果这样返回,代码最后分配的内存地址并不是同一个,所以我们需要使用单例模式。
#!/usr/bin/python3#coding=utf-8
classMusicPlayer(object):def __new__(cls, *args, **kwargs):#1.创建对象时, new方法会被自动调用
print("创建对象,分配空间")#2.为对象分配空间
instance = super().__new__(cls)#3.返回对象的引用
returninstancedef __init__(self):print("播放器初始化")#创建播放器对象
player =MusicPlayer()print(player)
player1=MusicPlayer()print(player is player1)
我们可以先划空一块内存空间,创建对象的时候先判断是否分配过,然后返回
#!/usr/bin/python3#coding=utf-8
classMusicPlayer(object):
instance=Nonedef __new__(cls, *args, **kwargs):print("分配空间,创建对象。")if cls.instance isNone:
cls.instance= super().__new__(cls)returncls.instance
player=MusicPlayer()print(player)
player1=MusicPlayer()print(player is player1)
3.异常:为了避免程序执行过程中发生异常,对可能产生的异常进行捕捉
try:
except(错误类型):
else: //没有异常才会执行的代码
finally: //无论最后有无异常都会执行的代码
多种异常事例
#!/usr/bin/python3#coding=utf-8
try:
num= int(input("请输入整数:"))
result= 8/numprint(result)exceptValueError:print("请输入正确的整数")exceptZeroDivisionError:print("除0错误")exceptException as result:print("未知错误%s" %result)else:print("正常执行")finally:print("执行完成,但是不保证正确")
假设我们在程序执行中,如果出现了异常,我们需要让程序一直执行,直到输入正常为止:
#!/usr/bin/python3#coding=utf-8
flag=Truewhileflag:#try流程中某一句异常,不会再执行该语句后的代码,try代码块后的代码可以得到执行
try:
num= int(input("请输入整数:"))
result= 8/numprint(result)exceptValueError:print("请输入正确的整数")exceptZeroDivisionError:print("除0错误")else:
flag=Falseprint(flag)