如何使用Python中的魔法方法__call__实现对象调用?

2026-05-16 15:361阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计370个文字,预计阅读时间需要2分钟。

如何使用Python中的魔法方法__call__实现对象调用?

1. __call__ 魔法函数的使用,实现了对象可以像函数一样调用。例如:pythonclass Student(object): def __init__(self, name): self.name=name

如何使用Python中的魔法方法__call__实现对象调用?

def __call__(self, age, sex): print(age is: %s % age)


1、__call__魔法函数的使用

  • __call__魔法函数,实现了对象可以像函数一样调用
    如下:
class Student(object):
def __init__(self,name):
self.name=name

def __call__(self,age,sex):
print("age is :{age},sex is :{sex}".format(age=age,sex=sex))

s=Student("Jack")
s(20,"man")

执行结果如下:

age is :20,sex is :man

__call__魔法函数的典型应用:装饰器类

如下代码:decorator(name=“func_decorator”)本身是一个对象,乍一看,这里好像使用了对象来装饰一个函数,这显然是不合理的,因此,这里就是使用了__call__魔法函数,即虽然decorator(name=“func_decorator”)是一个对象了,但是继续当函数调用,此时走到的是类中的__call__魔法函数方法中

class decorator(object):
def __init__(self, name="hello world"):
self.name = name

def __call__(self, func):
def wrapper(*args, **kwargs):
print("before func {func}()...".format(func=func.__name__))
print("name= {name}".format(name=self.name))
result = func(*args, **kwargs)
print("after func {func}()...".format(func=func.__name__))
return result

return wrapper

@decorator(name="func_decorator")
def func(a, b=10):
print("in func func3()...")
print("a={a}, b= {b}".format(a=a, b=b))

func(10,b=100)

执行结果如下:

before func func()...
name= func_decorator
in func func3()...
a=10, b= 100
after func func()...


标签:用法C

本文共计370个文字,预计阅读时间需要2分钟。

如何使用Python中的魔法方法__call__实现对象调用?

1. __call__ 魔法函数的使用,实现了对象可以像函数一样调用。例如:pythonclass Student(object): def __init__(self, name): self.name=name

如何使用Python中的魔法方法__call__实现对象调用?

def __call__(self, age, sex): print(age is: %s % age)


1、__call__魔法函数的使用

  • __call__魔法函数,实现了对象可以像函数一样调用
    如下:
class Student(object):
def __init__(self,name):
self.name=name

def __call__(self,age,sex):
print("age is :{age},sex is :{sex}".format(age=age,sex=sex))

s=Student("Jack")
s(20,"man")

执行结果如下:

age is :20,sex is :man

__call__魔法函数的典型应用:装饰器类

如下代码:decorator(name=“func_decorator”)本身是一个对象,乍一看,这里好像使用了对象来装饰一个函数,这显然是不合理的,因此,这里就是使用了__call__魔法函数,即虽然decorator(name=“func_decorator”)是一个对象了,但是继续当函数调用,此时走到的是类中的__call__魔法函数方法中

class decorator(object):
def __init__(self, name="hello world"):
self.name = name

def __call__(self, func):
def wrapper(*args, **kwargs):
print("before func {func}()...".format(func=func.__name__))
print("name= {name}".format(name=self.name))
result = func(*args, **kwargs)
print("after func {func}()...".format(func=func.__name__))
return result

return wrapper

@decorator(name="func_decorator")
def func(a, b=10):
print("in func func3()...")
print("a={a}, b= {b}".format(a=a, b=b))

func(10,b=100)

执行结果如下:

before func func()...
name= func_decorator
in func func3()...
a=10, b= 100
after func func()...


标签:用法C