zoukankan      html  css  js  c++  java
  • 类的特殊成员方法

    __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__
  • 相关阅读:
    Multi ingress controller
    Obtain file system information
    What is the difference between “inode size” and “Bytes per inode”
    Build and install fluent-bit on CentOS7
    Failed to initialize NVML: Driver/library version mismatch.
    利用multiprocessing.managers开发跨进程生产者消费者模型
    [算法] 举一反三之n重复数组中找唯一m重复异类数
    HBase Thrift过滤语法
    kubernetes pod infra container网络原理
    CentOS7上手动部署入门级kubernetes
  • 原文地址:https://www.cnblogs.com/czz0508/p/10456918.html
Copyright © 2011-2022 走看看