python 可调用对象之类实例
可调用对象,即任何可以通过函数操作符()来调用的对象。
python可调用对象大致可以分为4类:
1、函数
python中有三种函数:内建函数(BIFs)、用户自定义函数(UDF)、lambda表达式
2、方法
和函数类似,方法也有內建方法(BIM)和用户自定义方法(UDM)。用户自定义方法是被定义为类的一部分的函数;內建方法,如一个python数据类型如列表和字典,也有方法,这些方法就叫做内建方法。
內建方法和内建函数不同之处在于,內建方法的__self__属性指向一个python对象,而内建函数的__self__指向None
3、类
实例化
4、某些类的实例
python给类创建了__call__的特别方法,该方法允许程序员创建可调用的对象(实例)。默认情况下,__call__()是没有实现的,即大多数的类的实例是不可调用的。而如果类中实现了这个方法,那么这个类的实例就成了可调用的了。
调用这样的实例等同于调用__call__()方法。
这里主要讲一下可调用实例的作用:
1、可以简化对象下方法的调用
如foo 类实现了__call__()方法,那么调用 foo() 和调用foo.__call__()是一样的。
这种使用与当对象下面只有一个方法的时候,或者对象下某个方法被使用很多次的情况下。
2、模糊了对象和函数的区别,这个具体有什么用呢?看个例子:
class A():
def get():
return object()
class B():
def run():
return object()
def foo():
return object()
上面创建了两个类和一个函数,现在我需要定义main函数,接收一个参数,并得到object对象
def Main(param):
# 如果param为A
param.get()
# 如果param为B
param.run()
# 如果param为foo
param()
Main(A())
Main(B())
Main(foo)
要完成这个需求,通过上面三种方式去分别调用,且需要在main函数内部去判断,当前调用的是哪个类
那么如果我把上面的三种情况换成可调用对象实例的方式去完成呢?
class A():
def __call__():
return object()
class B():
def __call__():
return object()
def foo():
return object()
这样改写后,同样要实现上面的需求,我们需要怎么做呢?
def Main(callableFun):
callableFun()
Main(A())
Main(B())
Main(foo)
可以看到,在main函数内部,我们可以大大的简化我们的代码,不需要再针对的性的去做判断,这就是可调用实例类的用处之一。
python 可调用对象之类实例的更多相关文章
- python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法
1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过“类名()”的方式实例 ...
- python之 类对象 类方法 实例对象 实例方法 静态方法
实例对象1. 创建的时间:使用 类名()的时候,就创建一个实例对象2. 实例属性:怎样添加 只要是一个变量能够指向这个实例对象,那么这个变量.xxxx = 111就是给其添加一个实例属性 特点: 跟着 ...
- Python 可调用对象
除了用户定义的函数,调用运算符(即 ())还可以应用到其他对象上.如果想判断对象能否调用,可以使用内置的 callable() 函数.Python 数据模型文档列出了 7 种可调用对象.(1)用户定义 ...
- python面向对象编程对象和实例的理解
给你一个眼神,自己体会
- Python深入03 对象的属性
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python一切皆对象(object),每个对象都可能有多个属性(attribut ...
- Python类与对象的理解
注意python的类对象与实例对象的区分 类对象与实例对象是相对的,例如:a=1,那么a就是int的一个实例对象,这里的a相对于int来说,a是实例对象,int是类对象.但是int同时又是type的实 ...
- python—类对象和实例对象的区别
最近在对RF的通讯层的模块进行封装,需要将之前放在类似main里面的一个方法,如下所示:这段代码是开发提供,用于接口测试,模拟底层通讯,具体的通讯是在dll内,python这边只是做了个封装让RF进行 ...
- Python中的7种可调用对象
Python中有七种可调用对象,可调用对象可使用内置函数callable来检测 一.用户自定义的函数: 使用def语句或者lambda表达式创建的函数. 二.内置函数: 使用C语言实现的函数,如len ...
- python之对象(实例)
1.对象是关于类而实际存在的一个例子,即实例 #类实例化得到g1这个实例 class Garen: camp='Demacia' def __init__(self,nickname,aggressi ...
随机推荐
- 产品经理说|AIOps 让告警管理变得更智能
AIOps 人工智能和IT运营支撑 Ops 之间的故事,愈演愈烈,已经成为当今运维圈的热门话题,我打算从2篇文档分享我们在 AIOps 上一些探索和实践.(本篇)为什么事件(告警)处理需要 AIOps ...
- Android Demo Android ActionBarCompat-ListPopupMenu
示例显示如何使用v7 appcompat库中的PopupMenu显示弹出式菜单.主界面使用V4支持库的ListFragment显示数据列表,当点击列表子项时,在子项下方弹出下拉菜单,并通过设置setO ...
- 初学ubuntu命令
将我第一天学的内容做个笔记 ,方便日后查看 命令的使用: ls ls -a 显示所有文件 ls -l 显示文件的所有信息 cp 注意命令格式 /home/../temp/a /ho ...
- Python对文件的解压和压缩
zipfile: 解压: import os, zipfile serverzip_path = 'D:\\server.zip' serverzip_target_path = 'd:\\2' f ...
- February 12th, 2018 Week 7th Monday
One man's fault is another man's lesson. 前车之覆,后车之鉴. We make mistakes every day, large or small, fail ...
- mybatis : ERROR. token : COMMA, pos : 373
查询的字段符号问题,可能是多了" , " 也可能是少了 " , " 仔细检查, 都能解决
- FCM算法的matlab程序
FCM算法的matlab程序 在“FCM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- 12.scrapy框架之递归解析和post请求
今日概要 递归爬取解析多页页面数据 scrapy核心组件工作流程 scrapy的post请求发送 今日详情 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久 ...
- 【English】20190307
appropriate for 适用[əˈpropriɪt fɔr] appropriate for many business applications:
- vue-引入外部js文件的方法和常量
1.方法调用 a: js文件(static/js/public.js) //函数的定义 返回上一页 export function goback(laststep) { laststep } b: ...