__len__:如果一个类对象表现的像一个列表能够获得自己有多少个元素那样(即调用len()函数),就得调用__len__()函数。
class Student(object): def __init__(self, *args): self.names = args def __len__(self): return len(self.names) s = Student('Bob', 'Alice', 'Tim') print(len(s)) ---> 3
__doc__:该方法将类的描述信息打印出来。注意:在调用的时候不加括号
class Student(object): """这是一个学生类""" def __init__(self, *args): self.names = args def __len__(self): return len(self.names) s = Student('Bob', 'Alice', 'Tim') print(Student.__doc__) ---> 这是一个学生类 print(s.__doc__) ---> 这是一个学生类
__call__:该方法是对象后面加括号才会执行。在pytorch中,通过对象后面括号内加入待处理图像,就会执行forward函数,应该是覆盖了这个方法。
class Fib(): def __call__(self, *args, **kwargs): ret = [1,1] num = int(args[0]) if num == 1: return [1,] else: while len(ret)< num: ret.append(ret[-1]+ret[-2]) return ret fib = Fib() print(fib(5)) ----->[1, 1, 2, 3, 5]
__str__:如果想将一个类的对象转化为字符串,就需要这个特殊的方法。其实就是将对象转化为str类型时,会执行这个方法。当然默认情况下打印对象时也是执行这个方法。
在pytorch中对对象打印时,出现的是其对应的网络框架,应该是对这个方法进行了重写。
__repr__和__str__的区别只在于:__str__是为用户显示的,而__repr__是为开发人员显示的。
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) p = Person('alex', 'male') print(p) ----->(Person: alex, male)
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__