Python进阶五中,如何自定义实现类的__call__方法?

2026-06-11 07:521阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

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

Python进阶五中,如何自定义实现类的__call__方法?

在Python中,函数实际上是一个对象:1+f=abs 2+f.__name__ 3+'abs' 4+f(-123) 5+123 由f的可调用性可知,f被称为可调用对象。所有的函数都是可调用对象。一个类实例也被称为可调用对象。

python中 __call__

在Python中,函数其实是一个对象:

1 >>> f = abs 2 >>> f.__name__ 3 ‘abs‘ 4 >>> f(-123) 5 123

由于f可以被调用,所以,f被称为可调用对象。

Python进阶五中,如何自定义实现类的__call__方法?

所有的函数都是可调用对象。

一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

我们把Person类变成一个可调用对象:

1 class Person(object): 2 def __init__(self, name, gender): 3 self.name = name 4 self.gender = gender 5 6 def __call__(self, friend): 7 print ‘My name is %s...‘ % self.name 8 print ‘My friend is %s...‘ % friend

现在可以对Person实例直接调用:

1 >>> p = Person(‘Bob‘, ‘male‘) 2 >>> p(‘Tim‘) 3 My name is Bob... 4 My friend is Tim...

任务

改进一下前面定义的斐波那契数列:

class Fib(object): ???

请加一个__call__方法,让调用更简单:

1 >>> f = Fib() 2 >>> print f(10) 3 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

1 class Fib(object): 2 def __call__(self, num): 3 a, b, L = 0, 1, [] 4 for n in range(num): 5 L.append(a) 6 a, b = b, a + b 7 return L 8 9 f = Fib() 10 print f(10)

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

Python进阶五中,如何自定义实现类的__call__方法?

在Python中,函数实际上是一个对象:1+f=abs 2+f.__name__ 3+'abs' 4+f(-123) 5+123 由f的可调用性可知,f被称为可调用对象。所有的函数都是可调用对象。一个类实例也被称为可调用对象。

python中 __call__

在Python中,函数其实是一个对象:

1 >>> f = abs 2 >>> f.__name__ 3 ‘abs‘ 4 >>> f(-123) 5 123

由于f可以被调用,所以,f被称为可调用对象。

Python进阶五中,如何自定义实现类的__call__方法?

所有的函数都是可调用对象。

一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

我们把Person类变成一个可调用对象:

1 class Person(object): 2 def __init__(self, name, gender): 3 self.name = name 4 self.gender = gender 5 6 def __call__(self, friend): 7 print ‘My name is %s...‘ % self.name 8 print ‘My friend is %s...‘ % friend

现在可以对Person实例直接调用:

1 >>> p = Person(‘Bob‘, ‘male‘) 2 >>> p(‘Tim‘) 3 My name is Bob... 4 My friend is Tim...

任务

改进一下前面定义的斐波那契数列:

class Fib(object): ???

请加一个__call__方法,让调用更简单:

1 >>> f = Fib() 2 >>> print f(10) 3 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

1 class Fib(object): 2 def __call__(self, num): 3 a, b, L = 0, 1, [] 4 for n in range(num): 5 L.append(a) 6 a, b = b, a + b 7 return L 8 9 f = Fib() 10 print f(10)