[学习记录]python魔术方法与抽象方法like型反思

之前一直没搞懂python的魔术方法是怎么回事,今天看到一篇讲的很好的文章,这里先把链接贴出来

总的来说魔术方法就是定义成用两条下划线包围方法名前后的一种方法,例如__init__,__del__等等

换句话说,当你在python中使用dir()时,看到的那么一大堆__方法__都是魔术方法,如下图

test类只定义了一个hello方法,但是dir展示了大量的魔术方法。这些魔术方法都是内置的,但是允许我们对它们进行重写。

对比一下会感觉有点像定义的接口类的抽象方法,定义出来作为模板,然后由子类对其进行实现,稍微不同的是即使我们没有手动实现,也有默认的实现,因此更像是函数的重写。

这些魔术方法很多,大多负责类生命周期、运算、属性修改等等,我们一旦对其进行了修改,无需特意调用,它们就会自然地在特定地时机运行,例如__eq__就会运行在两个对象发生比较地时候。

由此可以进一步完善一个"框架"的概念,即有部分预定义组件被设计好将会在某些场合运行,我们可以对其进行修改,也可以放着不管使用默认的预定义组件。而我们手动添加的组件往往需要我们自己指定它们运行的时机。

更通俗的例子就是一个汽车框架,有配置好的普通轮子,我们也可以用更加优质的轮胎去替换它,但都是担任相同的功能。而自定义方法更类似例如汽车顶部放置一个摄像机用来拍摄婚礼车队之类的东西。

原文地址:https://www.cnblogs.com/trickofjoker/p/11063669.html

时间: 2024-08-01 03:20:07

[学习记录]python魔术方法与抽象方法like型反思的相关文章

大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”

虚方法:可以重写,也可以不重写,英文名:virtual 抽象方法:必须重写,必须放在抽象类中,英文名:abstract 重写:可以重写三种方法:virtual,abstract,override,英文名:override 抽象类:可以有抽象方法,也可以有非抽象方法,英文名:abstract 接口:和抽象类相似,但是里面只有未实现的方法,英文名:interface 大龙的学习笔记之"虚方法,抽象方法,重写,抽象类,接口",布布扣,bubuko.com

Python 魔术方法笔记

魔术方法总是被__包围, 如__init__ , __len__都是常见的魔术方法,这里主要写一下我遇到的一些魔术方法 setitem 对某个索引值赋值时 即可以进行赋值操作,如 def __setitem__(self, k, v): self.put(k, v) 在上述代码的情况下,可以执行p['key'] = value操作,即将key赋给k,value赋给v,执行put(k, v)函数.所以,__setitem__建立的前提,是要这个函数内的操作本来具有赋值的性质. getitem 使用

032.Python魔术方法__new__和单态模式

一 __new__ 魔术方法 1.1 介绍 触发时机:实例化类生成对象的时候触发(触发时机在__init__之前) 功能:控制对象的创建过程 参数:至少一个cls接受当前的类,其他根据情况决定 返回值:通常返回对象或None 对象.属性 对象.方法() 类.属性 类.方法() 1.2 基本用法 class MyClass(): abc = 123 def __new__(cls): #把class这个类传递__new__这个方法 print (123) return None #返回一个None

PHP学习笔记——10.魔术方法

1.定义 是指在某些特定情况下会自动调用的方法 PHP提供了多个魔术方法,都是以__开头的 2.构造方法 __construct 当实例化对象时,会自动调用该方法 可用于在实例化对象时传参,以控制类的属性 class 类名 { private 属性名 = null; public function __construct ($形参) { $this -> 属性名 = $形参; } } $对象 = new 类名('实参'); echo $对象 -> 属性名; 3.析构方法 __destruct

Python 魔术方法及调用方式

魔术方法 调用方式 解释 __new__(cls [,...]) instance = MyClass(arg1, arg2) __new__ 在创建实例的时候被调用 __init__(self [,...]) instance = MyClass(arg1, arg2) __init__ 在创建实例的时候被调用 __cmp__(self, other) self == other, self > other, 等. 在比较的时候调用 __pos__(self) +self 一元加运算符 __n

Python魔术方法

1. 查看属性 方法: __dir__ 意义: 返回类或者对象的所有成员名称列表.dir()函数就是调用__dir__().如果提供__dir__(),则返回属性的列表,否则会尽量从__dict__属性中收集信息. 如果dir([obj])参数包含方法__dict__(),该方法将被调用.如果参数不包含__dir__(),该方法将最大限度地收集参数信息. dir()对于不同类型的对象具有不同的行为: 如果对象是模块对象,列表包含模块的属性名. 如果对象是类型或者类对象,列表包含类的属性名,及它的

python 魔术方法

import time func_count_time_dict = {} def count_time(func): global func_count_time_dict func_count_time_dict[func]=[1,time.localtime()] def wrapper(): global func_count_time_dict func() print 'func name: ',func.__name__ print 'count: ',func_count_tim

[学习记录]python装饰器、getter、setter

1.装饰器 一般以@开头,后面紧跟着一个函数,例如flask中的url设置就是一种装饰器 2.getter与setter 这里用代码来解释 1 class Student(object): 2 3 @property 4 def score(self): 5 return self._score 6 7 @score.setter 8 def score(self, value): 9 self._score=value 第一个@property将score变成了一个getter,同时允许创建@

流动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