Python: 代码分析显示 OOP 中有多个未定义的错误

Python: Code analysis shows multiple undefined errors in OOP

我定义了一个名为 Email 的新 class,并且必须创建一些方法。问题是,我在构造函数中定义了变量,Spyder 上的代码分析一直说 inboxis_spamhas_been_read 没有在我的一些方法中定义,即使我在构造函数中定义了它。

找遍了,实在想不通自己做错了什么?

我正在使用 Spyder 4.1.5 和 Python 3.8

我的代码如下:

class Email(object):
    
    def __init__(self, has_been_read, email_contents, is_spam, from_address, inbox):
        assert type(has_been_read) == bool and type(is_spam) == bool
        self.has_been_read = has_been_read
        self.email_contents = email_contents
        self.is_spam = is_spam
        self.from_address = from_address
        self.__inbox = []
        
    def mark_as_read(self):
        # Creating method to change has_been_read boolean to True
        return self.has_been_read == True
    
    def mark_as_spam(self):
        # Creating method to change is_spam to True
        return self.is_spam == True
    
    def add_email(self, eamil_contents, from_address):
        return Email(False, email_contents, False, from_address)
        inbox.append(Email)
        
    def get_count(self):
        print(len.inbox)
        
    def get_email(self, i):
        print(inbox[i].email_contents)
        return inbox[i].mark_as_read
    
    def get_unread_emails(self):
        for i in inbox:
            if has_been_read == False:
                print(i) 
                
    def get_spam_emails(self):
        for i in inbox:
            if is_spam == True:
                print(i)
                
    def delete(self, i):
        del self.inbox[i]

注意每个实例方法的第一个参数是 self。这是对 class 实例的引用。因此,如果您想从其中一种方法访问字段 inbox,则需要引用实例 self。例如

def get_count(self):
    print(len(self.inbox))

如果你不这样做,你就是在告诉 python 解释器找到未定义的局部变量 inbox,即使 self.inbox 是。

显然,这与@go2nirvana 指出的相同。