当前位置: 首页 > 编程日记 > 正文

python神秘的魔法函数_Python魔法函数

1.什么是魔法函数

魔法函数即Python类中以__(双下划线)开头,以__(双下划线)结尾的函数,Python提供的函数,可让咱们随意定义类的特性

示例:

class Company(object):

def __init__(self, employee_list):

self.employee = employee_list

def __getitem__(self, item):

return self.employee[item]

company = Company(["Tom", "Jerry", "Bob"])

# 没有__getitem__时,经过这种方式遍历Company类中的employee

for em in company.employee:

print(em)

# 自定义__getitem__后,Company变为可迭代对象

for em in company:

print(em)

代码中的__init__、__getitem__即为魔法函数

2.Python的数据模型以及数据模型对Python的影响

魔法函数自己是Python的数据模型,魔法函数是网络流行的叫法

以__len__为例说明数据模型(魔法函数)对Python的影响

class Company(object):

def __init__(self, employee_list):

self.employee = employee_list

def __getitem__(self, item):

return self.employee[item]

def __len__(self):

return len(self.employee)

company = Company(["Tom", "Jerry", "Bob"])

# 不定义__len__是没法使用len()的

print(len(company))

3.Python魔法函数一览(个别说明)

3.1非数学运算

字符串表示__repr__、__str__

__str__:对对象进行字符串格式化

class Company(object):

def __init__(self, employee_list):

self.employee = employee_list

company = Company(["Tom", "Jerry", "Bob"])

print(company) # 在Python解释器中会隐含调用str,即print(str(company))

此时输出:<__main__.company object at>

验证解释器隐含调用str

class Company(object):

def __init__(self, employee_list):

self.employee = employee_list

def __str__(self):

return ','.join(self.employee)

company = Company(["Tom", "Jerry", "Bob"])

print(company)

输出:Tom,Jerry,Bob

__repr__:开发模式才会用到

class Company(object):

def __init__(self, employee_list):

self.employee = employee_list

company = Company(["Tom", "Jerry", "Bob"])

company # 在Python解释器中会隐含调用repr,即repr(company),在Python内部为company.__repr__()

此时输出:<__main__.company at>

验证解释器隐含调用repr

class Company(object):

def __init__(self, employee_list):

self.employee = employee_list

def __repr__(self):

return ','.join(self.employee)

company = Company(["Tom", "Jerry", "Bob"])

company

输出:Tom,Jerry,Bob

3.2数学运算

pass

相关文章:

HDU-4738-Caocao's Bridges(tarjan)

转载于:https://www.cnblogs.com/GrowingJlx/p/6642692.html

博客园美化技巧汇总

首先得有js权限 1.1 页脚js代码 <script type"text/javascript"> /*功能&#xff1a;生成博客目录的JS工具测试&#xff1a;IE8&#xff0c;火狐&#xff0c;google测试通过zhang_derek2018-01-03 */ var BlogDirectory {/*获取元素位置&#xff0c;距浏览器左…

数据事务四种隔离机制和七种传播行为

数据事务四种隔离机制和七种传播行为 一、隔离级别&#xff1a; 数据库事务的隔离级别有4个&#xff0c;由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable&#xff0c;这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 &#xff11;.…

vue注册新节点_vue怎么重新组装slots节点

在后台列表中通常会有比较多的操作按钮 过多的按钮影响布局 也影响操作 因此想通过vue的组件来控制显示的按钮个数 多余的按钮自动被收进一个特殊的 更多 按钮里面&#xff0c;效果图&#xff1a;组件定义&#xff1a;Vue.component(button-groups, {render(createElement) {re…

什么是EOS?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 关于EOS有很多炒作。2017年5月&#xff0c;EOS的创始人丹•拉莫(Dan Larimer)在纽约宣布这一消息时&#xff0c;一幅巨大的巨型屏幕广告在时代广场上…

【GDKOI2016Day1T1-魔卡少女】【拆位】线段树维护区间内所有连续子区间的异或和...

题意&#xff1a;给出N个数&#xff0c;M个操作。操作有修改和询问两种&#xff0c;每次修改将一个数改成另一个数&#xff0c;每次询问一个区间的所有连续子区间的异或和。n,m<100000,ai<1000 题解&#xff1a; 当年&#xff08;其实也就是今年&#xff09;做不出来的题…

用composer安装laravel-bjyblog

前面讲了两行命令composer的安装&#xff0c;现在我们来操作一下composer安装基于laravel的博客laravel-bjyblog。测试环境是linux&#xff0c;bt面板&#xff0c;php7.2安装扩展fileinfo/opcache/redis/imagemagick/imap/exif&#xff0c;禁用 proc_open 函数 下面开始安装&am…

微信小程序多项选择器_微信小程序三级联动之多列选择器

有些时候&#xff0c;三级联动业务场景并不只是全国地区选择&#xff0c;可能还涉及到自定义分类的三级联动&#xff0c;这时就需要使用微信的多列选择器。如果只是一列字段&#xff0c;或者每次拖动一次都去服务端取&#xff0c;会比较容易。 如果想一次定义好json,关联数据相…

eosjs-ecc中文文档

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 eosjs-ecc是eos官方处理密钥和签名的javascript开发包。访问地址&#xff1a;eosjs-ecc中文手册。 eosjs-ecc安装 nodejs环境下&#xff0c;使用N…

rocketmq 组监听_最全的RocketMQ学习指南,程序员必备的中间件技能

一、简介RocketMq是阿里开发出来的一个消息中间件&#xff0c;后捐献给Apache。官网上是这样介绍的&#xff1a; Apache RocketMQ™ is a unified messaging engine, lightweight data processing platform.RocketMQ是一个统一的处理消息引擎&#xff0c;轻量级的数据处理平台。…

【刷题】BZOJ 4516 [Sdoi2016]生成魔咒

Description 魔咒串由许多魔咒字符组成&#xff0c;魔咒字符可以用数字表示。例如可以将魔咒字符 1、2 拼凑起来形成一个魔咒串 [1,2]。 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒。 例如 S[1,2,1] 时&#xff0c;它的生成魔咒有 [1]、[2]、[1,2]、[2,1]、[1,2,1] 五种…

jQuery的文档操作方法

jQuery 文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的&#xff0c;除了&#xff1a;html()。 方法描述addClass()向匹配的元素添加指定的类名。after()在匹配的元素之后插入内容。append()向匹配元素集合中的每个元素结尾插入由参数指定的内容。appendTo()向目标结…

原 EOS智能合约开发入门

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 EOS智能合约的开发需要使用llvm和abigen来生成abi文件。 为此eos提供了一个 名为eosiocpp的工具。 在这篇文章中&#xff0c;我们介绍如何使用这个工…

python安装虚拟环境virtualenv

虚拟环境 虚拟环境是一个将不同项目所需求的依赖分别放在独立的地方的一个工具&#xff0c;它给这些工程创建虚拟的Python环境。它解决了“项目X依赖于版本1.x&#xff0c;而项目Y需要项目4.x”的两难问题&#xff0c;而且使你的全局site-packages目录保持干净和可管理。 比如&…

可变分区存储管理实验报告总结_操作系统实验报告-可变分区存储管理方式的内存分配回收...

一&#xff0e;实验目的(1)深入了解可变分区存储管理方式的内存分配回收的实现。二&#xff0e;实验内容编写程序完成可变分区存储管理方式的内存分配回收&#xff0c;要求有内存空间分配表&#xff0c;并采用最优适应算法完成内存的分配与回收。三&#xff0e;实验原理在可变分…

ubuntu/linuxmint如何添加和删除PPA源

【添加】 1、sudo add-apt-repository ppa:user/ppa-name 2、sudo apt-get update (然后再安装软件sudo apt-get install <package-name>或更新软件sudo apt-get upgrade) 【删除】 1、cd /etc/apt/source.list.d/ 2、sudo rm <ppa-name> 转载于:https://www.cnblo…

了解EOS看这一篇就够了一、团队二、技术三、项目进度四、争议和风险五、展望

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 无论是混迹于币圈、链圈还是矿圈&#xff0c;对BTC&#xff08;比特币&#xff09;、ETH&#xff08;以太坊&#xff09;、EOS这三大主流币一定不会…

qt 多个模型如何显示在表格中_Qt MOOC系列教程 第五章第四节:QML中的C++模型

我们已经多次讨论过如何创建自己的模型来表示QML中的数据&#xff0c;并且在上一节中我们看到了QStandardItemModel的基本示例。通常&#xff0c;出于性能和功能方面的原因&#xff0c;需要从一开始就要实现自己的模型。QAbstactItemModel类为项目模型类提供了抽象接口&#xf…

ubuntu终端基础命令

1. 启动终端的快捷键: ctr alt t2. 终端字体放大: ctrshift3. 终端字体放大: ctr-4. ls : 查看当前目录的文件信息 4.1 ls 路径&#xff1a; 查看指定目录的信息 4.1. pwd: 查看目录所在的路径5. touch: 创建文件 5.1 touch 1.txt 2.txt 创建多个文件6. mkdir: 创建…

js中操作数组的一些方法

增 push 在数组的末尾添加一个或多个元素&#xff0c;并返回新的长度。 array.push(1,2,3.........) unshift 在数组的开头添加一个或多个元素&#xff0c;并返回新的长度。 array.unshift(1,2,3......) splice 在制定位置添加一个活多个元素&#xff0c;splice(s…

a标签怎么传参_jsp页面中怎么利用a标签的href进行传递参数以及需要注意的地方...

jsp页面中&#xff1a;这是正确写法。需要注意的地方&#xff1a;1、传递的参数是数字2、传递的参数是字符串注意多了个单引号后台直接用request.getParameter("productIdStr"); 接收就可以了。此处也有要注意的地方&#xff1a;接收后要进行判空&#xff0c;否则会报…

转】windows下使用批处理脚本实现多个版本的JDK切换

原博文出自于:  http://www.cnblogs.com/xdp-gacl/p/5209386.html      感谢&#xff01; 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候&#xff0c;可能需要同时开发两个甚至多个项目&#xff0c;有时不同的项目对JDK的版本要求有区别&#xff0c;这时候…

mysql引擎介绍

1.myisam存储引擎&#xff1a;不支持事务&#xff0c;也不支持外键&#xff0c;优势是访问速度快&#xff0c;对事务完整性没有要求或者以select&#xff0c;insert为主的应用基本上可以用这个引擎来创建表。 2.innodb存储引擎&#xff1a;innodb引擎提供了具有提交&#xff0c…

为什么2100万个BTC发行总量少了0.0231?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 许多人只是听说比特币的总数为2100万个&#xff0c;但不知道这个数字的准确来源。实际上&#xff0c;2100万个只是一个近似数&#xff0c;精确的数…

Navicat连接数据库成功,新建查询时提示错误“Cannot create file ……”

Navicat连接数据库成功&#xff0c;新建查询时提示错误“Cannot create file ……” 原因:编辑连接{高级}<设置位置>被修改&#xff0c;该oci.dll不正确 解决方案&#xff1a;删除该连接信息&#xff0c;重新新建。编辑连接{高级}<设置位置>会自动生成&#xff0c;…

[深入React] 2.综述

在开始本教程前&#xff0c;请先查看官方示例&#xff1a;https://github.com/facebook/react/archive/master.zip 里的 examples 目录。 学习react是一个循序渐进的过程&#xff0c;虽然它概念较少&#xff0c;但在思想上和jQuery相差甚远。我在学的时候也是边开发边查官方文档…

element select 自动展开_原生js 让select下拉框自动展开 可用size 属性来代替展开动作...

找遍全网都没一个比较好的例子&#xff01;&#xff01;&#xff01;什么获得焦点事件&#xff0c;或者添加一个点击事件都不能使下拉框自动展开最后用标签的siz属性定义和用法size 属性规定下拉列表中可见选项的数目。如果 size 属性的值大于 1&#xff0c;但是小于列表中选项…

一文看懂怎样用 Python 创建比特币交易

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 比特币价格的上上下下&#xff0c;始终撩动着每一个人无比关切的小心脏。从去年初的 800 美元左右&#xff0c;飞涨到去年底到 19783.21 美元最高点…

[转]mysql 数据类型

原文地址:https://github.com/jaywcjlove/handbook/blob/master/MySQL/MySQL%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.md MySQL数据类型 数字类型 整数: tinyint、smallint、mediumint、int、bigint浮点数: float、double、real、decimal日期和时间: date、time、datetime、times…

dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件&#xff0c;它和我们传统Winform的TreeView控件使用上有所不同&#xff0c;我一般在Winform开发中根据情况混合使用这些控件&#xff0c;不过整体来看&#xff0c;基于DevExp…