Объект типа «метод» не имеет len() при определении класса

#python #dataframe #pytorch #geometry

Вопрос:

Я определил класс

 class Potsdam_Microgrid_DS1(Dataset):  def __init__(self, root, transform=None, pre_transform=None):  super().__init__(root, transform, pre_transform)   #List all processed data   def processed_file_names(self):  return ['data_1.pt', 'data_2.pt', 'data_3.pt']    def len(self):  return len(self.processed_file_names)   def get(self, idx):  data = torch.load(osp.join(self.processed_dir, 'data_{}.pt'.format(idx)))  return data  

Тогда беги

 Dataset_path = 'C:\Users\SPSC\Documents\Potsdam IMGData\data' Data=Potsdam_Microgrid_DS1(Dataset_path) Data.len()  

Результаты

 TypeError Traceback (most recent call last) ~AppDataLocalTemp3/ipykernel_29288/1760764674.py in lt;modulegt; ----gt; 1 Data.len()  ~AppDataLocalTemp3/ipykernel_29288/3878533142.py in len(self)  8   9 def len(self): ---gt; 10 return len(self.processed_file_names)  11   12 def get(self, idx):  TypeError: object of type 'method' has no len()  

Я понятия не имею, почему.

Комментарии:

1. self.processed_file_names это метод. Вам нужно позвонить ему, чтобы получить список, который он возвращает (т. Е. self.processed_file_names() )

2. Большое вам спасибо. Это решило проблему.

Ответ №1:

processed_file_names это метод, поэтому

 len(self.processed_file_names)  

запрашивает длину метода. Вам нужно вызвать метод:

 def len(self):  return len(self.processed_file_names())  

Комментарии:

1. Кроме того, Data.len() было бы либо Data.__len__() … либо len(Data) .

2. Это решило мою проблему.