Python — magic method
Posted jynno1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python — magic method相关的知识,希望对你有一定的参考价值。
Python 中内置的特定的方法, 这些方法在进行特定的操作时,会自动被调用。
__init__(self, [ ]) # 类的构造函数, 用于初始化实例变量
__new__(cls, [ ]) # 类的内置方法
__del__(self) # 当对象的引用为 0 时调用 该方法, 并不是del 时调用该方法
算术运算的 内置方法。对象可以进行算术运算,可通过修改这些方法,改变对象的行为
定义一个定时器的类,并通过重载其内部方法实现,定时器开始,结束,结果显示,及定时器对象的 加 (+,将两个定时器的时间相加并显示)操作。
需要注意,三个类方法在实例化后的调用顺序,如在start() 调用之前调用 stop()、未调用stop()而调用 + 操作,通过实例变量 message,对当前操作进度进行记录,并通过对时间的判断进行错误提醒,有点类似于状态机的状态码。
# 通过重定义内置方法 定制类 import datetime class Mytimer(): num = 0 def __init__(self): self.__class__.num += 1 self.start_time = 0 self.stop_time = 0 self.time_sec = 0 self.message = ‘未开始计时!‘ # 重定义 __str__ 以及 __repr__内置函数 用于控制输出 def __str__(self): return self.message __repr__ = __str__ def __add__(self, time): if self.time_sec and time.time_sec: add_result = self.time_sec + time.time_sec self.message = ‘总共计时时间为:‘ + str(add_result) else: self.message = ‘计时未结束!‘ return self.message def start(self): self.start_time = datetime.datetime.now() print(‘计时开始!‘) self.message = ‘未结束计时!‘ def stop(self): if self.start_time: self.stop_time = datetime.datetime.now() delta_time = self.stop_time - self.start_time self.time_sec = delta_time.total_seconds() self.message = ‘计时结果为:‘ + str(self.time_sec) +‘S‘ print(‘计时结束!‘) else: print(‘Plz run start first!‘) t = Mytimer() t1 = Mytimer()
定义类方法时需要注意实例变量与 函数的局部变量的区别,由于函数的局部变量生存空间仅限于该函数内部,因此需要在函数之间调用的变量需要设置未实例变量。实例变量与类变量之间由于作用对象不同,相互没有影响,类变量用于描述这个抽象类的属性,而实例变量用于描述实例化对象的属性。注意实例变量名与方法名不能相同,否则在__init__()初始化后会导致与变量名相同的函数被覆盖。
。
以上是关于Python — magic method的主要内容,如果未能解决你的问题,请参考以下文章
Python: __new__ magic method explained
Python笔记 · 魔法函数 / Magic Methods / Dunder Methods