Python __call__()方法

魔术方法介绍

以双下划线作为前缀和后缀的方法名是 Python 中特定使用的保留方法。例如, init 方法用于对象构造器,或者 call 方法用于使对象可调用。我们称这些方法为邓德方法,其中邓德指的是双 under(下划线)。这些邓德法又被称为魔法 -然而,并没有什么神奇的与之相关。Python 社区中有许多开发人员不太喜欢“魔法”这个词,因为它给人一种不鼓励使用这种方法的感觉,但矛盾是事实。

理解可调用函数

当对象在 call() 函数中定义时, Python 中的对象被称为可调用的。相同的功能可以定义为 x(arg 1,arg2,…) ,这是 x.call(arg1,arg 2,…) 的缩写。

注意:callable()方法返回一个布尔值,该值表示对象是否看起来是可调用的。如果对象是可调用的,此函数返回真;否则,它返回 False。此外,即使对象不可调用,该函数也可能返回 True。然而,如果这个方法返回 False,那么这个对象是不可调用的。

此外,Python 类总是可调用的。因此,我们总是可以将 callable() 函数用于类的对象,而不是类本身。

为了理解 Python callable() 函数的行为,让我们考虑以下示例。

示例:


# creating a class
class Employee:
    n = 0
    # defining a function
    def __init__(self, emp_id):
        self.i = emp_id

# instantiating the class
x = Employee(15)

# checking if the class and object are callable or not
print('Employee Class is callable = ', callable(Employee))
print('Employee object is callable = ', 

输出:

Employee Class is callable =  True
Employee object is callable =  False

说明:

在上面的例子中,我们定义了一个类 Employee ,它接受一个变量 n = 0 。然后我们定义了一个函数并实例化了这个类。最后,我们使用 callable() 函数检查了类及其对象是否可调用。

让我们考虑一个 调用 __() 函数的例子。

示例:


# creating Person Class
class Person:
    person_id = 0
    person_name = ""
    # defining an initializing function
    def __init__(self, personid, personname):
        self.person_id = personid
        self.person_name = personname

    # defining a callable function
    def __call__(self, *args, **kwargs):
        print('Printing Arguments')
        print(*args)

        print('Printing Keyword Arguments')
        for key, value in kwargs.items():
            print("%s == %s" % (key, value))

# instantiating the class
m = Person(15, 'George')

# printing the object
print(m)

# checking if the object is callable or not
print("The Person object is callable: ", callable

输出:

<__main__.person object="" at="">
The Person object is callable:  True

说明:

在上例中,我们定义了 Person 类和变量 person_id = 0 和Person _ name =“”。然后我们定义了初始化函数和可调用函数。最后,我们已经实例化了类,打印了对象,并检查了对象是否可调用。因此,person 对象看起来是可调用的。

此外,我们可以观察到,我们使用了 *args 来允许传递变量参数, **kwargs 来允许将命名参数传递给 call() 方法。

现在,让我们考虑另一个例子,我们将使用可调用()函数来检查对象是否可调用,然后将对象作为函数调用。

示例:


if callable(m):
    m()
    m(15, 30)
    m.__call__(15, 30)

    m(15, 30, {'a': 4, 'b': 8})

    m(15, 'B', personname = 'George', personid = 50)

输出:

Printing Arguments

Printing Keyword Arguments
Printing Arguments
15 30
Printing Keyword Arguments
Printing Arguments
15 30
Printing Keyword Arguments
Printing Arguments
15 30 {'a': 4, 'b': 8}
Printing Keyword Arguments
Printing Arguments
15 B
Printing Keyword Arguments
personname == George
personid == 50

说明:

在上面的例子中,我们定义了一个if-语句,其中如果对象 m 是可调用的,那么该对象作为一个没有参数的函数被调用,只有参数,有 call() 函数,有不同类型的参数,有参数和关键字参数。因此,已成功调用了所需的对象。


原创文章,作者:XTVIS,如若转载,请注明出处:https://www.506064.com/n/129807.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XTVIS的头像XTVIS
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相关推荐

  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论