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__()初始化后会导致与变量名相同的函数被覆盖。

原文地址:https://www.cnblogs.com/JYNNO1/p/10440313.html

时间: 2024-10-16 08:46:33

Python — magic method的相关文章

Python: __new__ magic method explained

https://howto.lintel.in/python-__new__-magic-method-explained/ Python: __new__ magic method explained Python is Object oriented language, every thing is an object in python. Python is having special type of  methods called magic methods named with pr

PHP Magic Method Setter and Getter

<?php /* Magic method __set() and __get() 1.The definition of a magic function is provided by the programmer – meaning you, as the programmer, will actually write the definition. This is important to remember – PHP does not provide the definitions of

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

这里只分析几个可能会常用到的魔法方法,像__new__这种不常用的,用来做元类初始化的或者是__init__这种初始化使用的 每个人都会用的就不介绍了. 其实每个魔法方法都是在对内建方法的重写,和做像装饰器一样的行为.理解这个道理 再尝试去理解每个细节装饰器会比较方便. 关于__str__和__repr__: 直接上例子: class Test(object): def __init__(self, world): self.world = world def __str__(self): re

流动python - 什么是魔术方法(magic method)

我们经常看到各种各样的方法已经被包围了由双下划线,例如__init__,他们是魔术方法. 魔术方法python语言预订好"协议",在不同情况下不同的魔术方法,是隐式调用.我们重写这些方法,因此,操纵各种行为. class A(object): def __str__(self): return "I am A,2333" def __len__(self): return 42 a = A() print a#输出 "I am A,2333" p

飘逸的python - 什么是魔术方法(magic method)

我们经常看到各种被双下划线环绕的方法,如__init__,它们就是魔术方法. 魔术方法是python语言预定好的"协议",不同魔术方法在不同场景下,会被隐式调用.我们通过重载这些方法,从而操控各种行为. class A(object): def __str__(self): return "I am A,2333" def __len__(self): return 42 a = A() print a#输出 "I am A,2333" prin

Python&amp;int&amp;method&amp;String切片、索引,列表、元祖、字典

一.int的两个方法 a. __add__() bit_length() number_one = 7number_two = 5print(number_one + number_two)print(number_one.__add__(number_two))print(number_one.bit_length())print(number_two.bit_length()) 效果: 121233 二.String索引和切片 name = 'Jane'print(name[0])print

Python中method的参数传递详解

function就是可以通过名字可以调用的一段代码,我们可以传参数进去,得到返回值.所有的参数都是明确的传递过去的.method是function与对象的结合.我们调用一个方法的时候,有些参数是隐含的传递过去的.下文会详细介绍.instancemethod  In [5]: class Human(object):   ...:   def __init__(self, weight):   ...:     self.weight = weight   ...:   def get_weigh

python string method

嗯,学习其它语言没这样全练过,嘻嘻 //test.py 1 # -*- coding: UTF-8 -*- 2 3 str = "i am worker" 4 print str.capitalize() 5 print str.center(20) 6 print str.count(' ') 7 print str.count(' ', 0, 4) 8 str1 = "中国" 9 str1.decode('utf-8').encode('gb2312') 10

Magic Method

是什么它是python面向对象的一整套方法 , 从对象的建立到属性的访问 , 到对运算符的支持 , 对特殊语法的支持形式方法名前后后两个_ , 如 : def __init__(self):2.2 对象的创建与初始化对象实例化的过程创建类的对象 : def __new__(cls)初始化对象 : def __init__(self)new方法在调用init方法之前被调用 , 返回一个类的初始对象 , 可以进行重写 , 但是要返回对象 , cls表示当前类回收对象def __del__() : 实