Почему не виден массив в методе?

Создал класс, в нем определил массив postsMas и ниже создал метод save(). Дальше в этом методе я хотел обратится к массиву но по какой-то неизвестной для меня причине в методе save() не виден массив postsMas. Хотя определяю массив выше метода. Объясните пожалуйста почему?

Вот код:

class Post():
title = '1'
pubDate = '2'
time = '3'

postsMas = [
    [self.title, self.pubDate, self.time]
]

SAVES_FILE = 'saves.dat'

def save(self):
    SAVES_FILE = 'saves.dat'
    with open(SAVES_FILE, 'ab') as file:
        pickle.dump(postsMas, file)

Ответы (4 шт):

Автор решения: CrazyElf
  • У вас съехало форматирование.
  • Определитесь: это у вас всё переменные класса (и тогда self там везде лишний) либо это переменные экземпляра класса (и тогда их надо инициализировать в специальной функции __init__ и везде перед такими переменными писать self, включая переменную postsMas.
→ Ссылка
Автор решения: вася
import pickle

class Post():
  title = '1'
  pubDate = '2'
  time = '3'

  postsMas = [title, pubDate, time]

  SAVES_FILE = 'saves.dat'

  def save(self):
    with open(Post.SAVES_FILE, 'wb') as file:
      pickle.dump(Post.postsMas, file)

Post().save()
→ Ссылка
Автор решения: S. Nick

Пробуйте так:

class Post():
    title = '1'
    pubDate = '2'
    time = '3'

    postsMas = [
        [title, pubDate, time]                                                # - self
    ]

    SAVES_FILE = 'saves.dat'

    def save(self):
#        SAVES_FILE = 'saves.dat'
        print(f'SAVES_FILE = {self.SAVES_FILE}, postsMas = {self.postsMas}')
        
        with open(self.SAVES_FILE, 'ab') as file:                              # + self.
            pickle.dump(self.postsMas, file)                                   # + self.
        
        
post = Post()  
post.save() 

или так:

class Post():
    def __init__(self):
        super().__init__()
        
        self.title = '1'
        self.pubDate = '2'
        self.time = '3'

        self.postsMas = [
            [self.title, self.pubDate, self.time] 
        ]

        self.SAVES_FILE = 'saves.dat'

    def save(self):
#        SAVES_FILE = 'saves.dat'
        print(f'SAVES_FILE = {self.SAVES_FILE}, postsMas = {self.postsMas}')
        
        with open(self.SAVES_FILE, 'ab') as file:              
            pickle.dump(self.postsMas, file)                    
        
        
post = Post()  
post.save() 
→ Ссылка
Автор решения: Андрей Таков

Создал массив в классе? Обращайся к нему, как классовому массиву Post.postsMas, то же самое будет касаться и переменных создаваемых внутри класса. Ты же ищешь глобальный элемент postsMas, которого нет.

→ Ссылка