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 method

python magic_method

Python笔记 · 魔法函数 / Magic Methods / Dunder Methods

草根学PythonPython 的 Magic Method

magic method细解python一直让我疑惑的几个常用魔法方法(上)