#python #oop #pytorch #pycharm
Вопрос:
TLDR — Код, который не должен выполняться, выполняется во время инициализации класса
У меня есть два класса, один базовый класс (который должен быть абстрактным) и один класс, который наследуется от него.
import logging
import torch
from torch.utils.data import Dataset
logger = logging.getLogger(__name__)
class TsDataSetBase(Dataset):
def __init__(self):
self.__labels: torch.Tensor = None
self.__data: torch.Tensor = None
def __len__(self):
return len(self.labels)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]
def get_as_tensor(self):
"""
load a single file as a tensor
"""
raise RuntimeError("this is a base class")
@property
def labels(self) -> torch.Tensor:
if self.__labels is None or self.__data is None:
self.__labels, self.__data = self.get_as_tensor()
return self.__labels
@property
def data(self) -> torch.Tensor:
if self.__labels is None or self.__data is None:
self.__labels, self.__data = self.get_as_tensor()
return self.__data
@property
def tensors(self):
"""
This is here to fit the TensorDataset object
"""
return self.data, self.labels
Это Сын:
import logging
from data_loaders.TsDataSetBase import TsDataSetBase
logger = logging.getLogger(__name__)
class UcrDataSet(TsDataSetBase):
def __init__(self, path_to_ds):
super().__init__()
self.path_to_ds = path_to_ds
print("so strange")
self._train = 123
print("end of init")
def get_as_tensor(self):
filepath = self.path_to_ds
print("strange")
logger.info(f"converting csv file to tensor {filepath}")
return None, None
def build_new_ds(path_to_ds: str) -> TsDataSetBase:
return UcrDataSet(path_to_ds)
Теперь, когда я выполняю следующую строку:
ds = build_new_ds(dataset_to_test)
Я получаю этот чрезвычайно странный вывод:
Connected to pydev debugger (build 202.7660.27)
so strange
strange
strange
strange
strange
Когда я пытаюсь использовать точку останова, она не останавливается, я использую Pycharm.
Это действительно заставляет меня задуматься о том, что именно происходит, это проблема с моим окружением или что-то еще?
Большое спасибо
Комментарии:
1. «Код, который не должен выполняться, выполняется во время инициализации класса» Что выполняется, что точно не должно выполняться?
2. метод get_as_tensor вызывается, и его не следует вызывать
3. Это невозможно воспроизвести, по крайней мере, с моей стороны, я получаю
'so strange'
и.'end of init'
Как вы выполняете свой код?