网站首页 > 技术文章 正文
你可能会看到别人的代码中,一个类实例化之后,还可以像函数一样调用使用,这可是太灵活了,你可能会疑惑,类的实例对象为什么这么有魔力,可以像函数那样调用使用,
这其中的魔力就是来自魔法方法__call__。
魔法方法__call__
在Python中,__call__是一个魔法方法,可以让对象被直接调用 ,就像函数一样。
当一个类实例被当作函数调用时,就会自动调用这个类的__call__方法。
基础用法
下面是一个简单的__call__使用示例:
import requests
class Search(object):
def __init__(self,baseurl):
self.baseurl=baseurl
def get_html(self,url):
return requests.post(url).json()
def __call__(self,value): #可以让类的实例以函数的方式调用
url=self.baseurl+str(value)
data = self.get_html(url)
for i in data:
print('name is %s'%i['name'])
创建Search实例,并调用
st='http://www.baidu.com'
search= Search(st) #实例化一个类
search('?xx=python') #像函数那样调用这个类
类装饰器
装饰器是一种特殊类型的函数,可以修改其他函数的功能或行为,而无需更改被修饰函数的源代码。它们在Python中广泛应用于日志记录、性能测试、权限校验等多种场景,极大地增强了代码的可重用性和灵活性。
利用类的__call__方法可以轻松实现装饰器功能,这种方式让装饰器本身更加模块化和可配置。当使用@形式将装饰器附加到函数上时,就会调用此方法。
代码示例:
class Foo(object):
def __init__(self, func):
self._func = func
def __call__(self):
print ('class decorator runing')
self._func()
print ('class decorator ending')
@Foo
def bar():
print ('hello nihao')
像函数装饰器那样使用
bar()
class decorator runing
hello nihao
class decorator ending
通过这种方式,__call__魔法方法不仅增加了代码的可读性和灵活性 ,还为实现更高级的设计模式 ,如装饰器、策略模式等,奠定了基础。
猜你喜欢
- 2025-05-22 早知道就好了!关于Python魔法方法的清单
- 2025-05-22 Python 模块导入(import)实战指南
- 2025-05-22 19-3-Python-类的常用内置方法
- 2025-05-22 认识python全栈框架reflex:快速打造工具类、模型调用web应用
- 2025-05-22 Python super()函数:调用父类的构造方法
- 2025-05-22 失业程序员复习python笔记——类
- 2025-05-22 Python 中 必须掌握的 20 个核心函数及其含义,不允许你不会
- 2025-05-22 python函数调用10种常见的语法错误
- 2025-05-22 Python常用函数整理
- 2025-05-22 Python函数调用最常用的3种方法:
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)