提问人:Marziye Hasanshahi 提问时间:10/4/2023 更新时间:10/4/2023 访问量:55
在 python 中理解此类初始化
Understanding this class intialization in python
问:
我有这段代码,它是 Spikingjelly 神经网络训练功能的一部分,它在运行后在这一行上出现一些错误。我对 Python 不是很有经验,我不明白这是什么类初始化类型。
类定义和如下所示:__init__
class DVS128Gesture(sjds.NeuromorphicDatasetFolder):
def __init__(
self,
root: str,
train: bool = None,
data_type: str = 'event',
frames_number: int = None,
split_by: str = None,
duration: int = None,
custom_integrate_function: Callable = None,
custom_integrated_frames_dir_name: str = None,
transform: Optional[Callable] = None,
target_transform: Optional[Callable] = None,
) -> None:
和初始化:
train_data_loader = torch.utils.data.DataLoader(
dataset=DVS128Gesture(dataset_dir, train=True, use_frame=True, frames_num=T,
split_by=split_by, normalization=normalization),
batch_size=batch_size,
shuffle=True,
num_workers=4,
drop_last=True,
pin_memory=True)
test_data_loader = torch.utils.data.DataLoader(
dataset=DVS128Gesture(dataset_dir, train=False, use_frame=True, frames_num=T,
split_by=split_by, normalization=normalization),
batch_size=batch_size,
shuffle=False,
num_workers=4,
drop_last=False,
pin_memory=True)
例如,类期望:DVS128Gesture
字符串 (root) 作为数据集的地址
布尔值(火车)变量(这不是我们现在的兴趣)
字符串
分配给 frames_number 的整数值
问题:但是,初始化(在图片底部)不是按照该顺序进行的;例如,用作第 3 个参数,而类的第 3 个参数是 。useframe=True
datatype: str = 'event'
问题:
我上面提到的问题,真的是作者的错误吗?还是我对某事的误解?
类初始化期间变量赋值的含义是什么?例如,类初始化的第 4 个参数写成 。为什么不直接写“T”呢?为什么用它代替原始的类定义?
framesnum=T
framesnum
frames_number
我跟踪了提到的变量、它们的声明和它们使用的类,据我所知,没有其他具有相同名称的变量。
答:
正如评论中提到的其他人,这是一个关键字参数 (kwarg),顺序无关紧要。调用函数时,您不必/have/使用关键字,但如果您不这样做,那么所有参数都必须具有正确的顺序和位置。
这似乎是一个错误。你可以使用 instead 而不仅仅是这样,如果你以正确的顺序传递参数并不重要,但你是对的,原始类声明中没有 kwarg。也没有或kwarg,所以我对这里发生的事情持怀疑态度。可以通过添加到参数列表并将其传递给 ,从而传递父类的关键字参数,而无需在子类中专门定义它们,但这里没有这样做,父类实际上也没有这些关键字参数中的任何一个。
frames_number=T
T
framesnum
use_frame
normalization
__init__
**kwargs
super.init()
评论
**kwargs
frames_num
frames_number