import praw
import time
class getPms():
r = praw.Reddit(user_agent="Test Bot By /u/TheC4T")
r.login(username='*************', password='***************')
cache = []
inboxMessage = []
file = 'cache.txt'
def __init__(self):
cache = self.cacheRead(self, self.file)
self.bot_run(self)
self.cacheSave(self, self.file)
time.sleep(5)
return self.inboxMessage
def getPms(self):
def bot_run():
inbox = self.r.get_inbox(limit=25)
print(self.cache)
# print(r.get_friends())#this works
for message in inbox:
if message.id not in self.cache:
# print(message.id)
print(message.body)
# print(message.subject)
self.cache.append(message.id)
self.inboxMessage.append(message.body)
# else:
# print("no messages")
def cacheSave(self, file):
with open(file, 'w') as f:
for s in self.cache:
f.write(s + '\n')
def cacheRead(self, file):
with open(file, 'r') as f:
cache1 = [line.rstrip('\n') for line in f]
return cache1
# while True: #threading is needed in order to run this as a loop. Probably gonna do this in the main method though
# def getInbox(self):
# return self.inboxMessage
例外是:
cache = self.cacheRead(self, self.file)
AttributeError: 'getPms' object has no attribute 'cacheRead'
我是新手使用python中的类,如果你需要我可以添加的更多信息,需要帮助解决我的错误。它适用于所有功能,但现在我试图将其切换到已停止工作的类。
答案 0 :(得分:3)
您的cacheRead
函数(以及bot_run
和cacheSave
)缩进太多,因此它在您的其他函数getPms
的正文中定义。因此,它只能在getPms
内访问。但是你试图从__init__
调用它。
我不确定你在这里想要实现什么,因为getPms
除了三个函数定义之外没有其他内容。据我所知,你应该取出def getPms
行并取消它所包含的三个函数,以便它们与__init__
方法对齐。
答案 1 :(得分:0)
以下几点:
class A(object):
,class A():
,class A:
是等效的。
您的班级名称和班级方法具有相同的名称。我不确定Python是否会对此感到困惑,但你可能会这样做。例如,您可以为自己的班级PMS
和方法get
命名,这样您就可以获得PMS.get(...)
在当前版本的缩进cacheRead
和cacheSave
函数中,init无法访问;为什么不把它们移到泛型类命名空间?
调用成员函数时,您不需要指定self
作为第一个参数,因为您已经从此对象调用了该函数。因此,不必像cache = self.cacheRead(self, self.file)
那样执行此操作:cache = self.cacheRead(self.file)