python 类:专有方法(魔法方法)

除了类的私有属性__private_attrs、私有方法__private_method之外,还有类的专有方法,包括:__init__、__del__、__len__、......

对于类的专有方法的说法之一是:在合适的时间,会自动调用其魔法方法,比如初始化时调用__init__,具体见链接

在CenterPoint模型中,一直疑惑何时给NuScenesDataset类对象(obj_cls(**args))的成员变量__nusc__infos赋值的。调试多次,没有直接调用赋值过程。原来是在是__len__中调用load_infos函数实现的,__len__会自动调用。需要说明的s是,在load_infos函数实现中会涉及其他成员变量,也需要它们存在。比如需要在self.test_mode=test_mode、self._class_names = class_names等完成赋值后,self.__len__才会执行。不过,对于返回值???

    def __len__(self):

        if not hasattr(self, "_nusc_infos"):
            self.load_infos(self._info_path)

        return len(self._nusc_infos)

 

posted @ 2022-03-06 21:44  kuaqi  阅读(296)  评论(0编辑  收藏  举报