python中的__call__和__repr__魔术方法

2020-08-26 11:06:38 浏览数 (1)

__call__:实现了__call__的对象是可调用的

__repr__:实现了__repr__的对象可以输出对象的相应属性信息

比如说:

代码语言:javascript复制
class Student:
  def __init__(self,id,name):
    self.id=id
    self.name=name
  def __repr__(self):
    return 'id=' str(self.id) ', name=' self.name
  def __call__(self):
    print("I can be called")
    print(f'my name is {self.name}')

首先创建一个对象:

代码语言:javascript复制
stu=Student(id-1,name="tom")

判断该对象是否是可调用的:

代码语言:javascript复制
callable(stu)

输出:True

那么,就可以使用如下方式调用该对象:

代码语言:javascript复制
stu()

输出:

I can be called

my name is 张三

而对于实现了__repr__魔术方法的类而言,我们可以使用如下方式打印其相关的属性信息:

代码语言:javascript复制
print(stu)

输出:

id=1, name=张三

需要注意的是,我们需要将self.id转换成str的格式,不然会报错。也就是说__repr__实际上是将对象以字符串的格式进行输出。

同样的,我们也可以使用ascii函数将对象以ascii的格式进行输出:

代码语言:javascript复制
ascii(stu)

输出;

'id=1, name=\u5f20\u4e09'

0 人点赞