类的特殊成员方法

__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__
原文地址:https://www.cnblogs.com/czz0508/p/10456918.html