1.需要打印的方法,可以使用静态方法。
def 静态方法名():
pass
静态方法需要修饰器@staticmethod来标识,告诉解释器这是一个静态方法
通过类名调用静态方法
使用示范:

#!/usr/bin/python3 # coding=utf-8 class Tool(object): #使用赋值语句,定义类属性,记录创建工具对象的总数 def __init__(self, name): self.name = name Tool.count += 1 @staticmethod def show_class_function(): print("I am a staticmethod") #创建工具对象 tool1 = Tool("斧头") tool2 = Tool("榔头") tool3 = Tool("铁锹") Tool.show_class_function()
2.单例模式:让类创建对象,在系统中只有唯一的一个实例
单例模式每次执行类名返回的对象,都是内存地址相同的
使用类名创建对象时,python的解释器首先会调用__new__方法为对象分配空间。
关于__new__方法(一个内置静态方法)作用:
1)为内存分配空间
2)返回对象的引用
python解释器获得对象引用以后将作为第一个参数传递给__init__方法
关于重写__new__方法:
1)重写以后一定要返回return super.__new__(cls)
__new__是一个静态方法,调用时需要主动传递cls参数
如果这样返回,代码最后分配的内存地址并不是同一个,所以我们需要使用单例模式。
#!/usr/bin/python3 # coding=utf-8 class MusicPlayer(object): def __new__(cls, *args, **kwargs): #1.创建对象时, new方法会被自动调用 print("创建对象,分配空间") #2.为对象分配空间 instance = super().__new__(cls) #3.返回对象的引用 return instance def __init__(self): print("播放器初始化") #创建播放器对象 player = MusicPlayer() print(player) player1 = MusicPlayer() print(player is player1)
我们可以先划空一块内存空间,创建对象的时候先判断是否分配过,然后返回
#!/usr/bin/python3 # coding=utf-8 class MusicPlayer(object): instance = None def __new__(cls, *args, **kwargs): print("分配空间,创建对象。") if cls.instance is None: cls.instance = super().__new__(cls) return cls.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/num print(result) except ValueError: print("请输入正确的整数") except ZeroDivisionError: print("除0错误") except Exception as result: print("未知错误%s" % result) else: print("正常执行") finally: print("执行完成,但是不保证正确")
假设我们在程序执行中,如果出现了异常,我们需要让程序一直执行,直到输入正常为止:
#!/usr/bin/python3 # coding=utf-8 flag = True while flag: #try流程中某一句异常,不会再执行该语句后的代码,try代码块后的代码可以得到执行 try: num = int(input("请输入整数:")) result = 8/num print(result) except ValueError: print("请输入正确的整数") except ZeroDivisionError: print("除0错误") else: flag = False print(flag)