【问题标题】:Cannot access my nested function which is inside the class无法访问我在类内的嵌套函数
【发布时间】:2020-12-25 07:02:04
【问题描述】:

所以在一个类里面我有一个函数,在那个函数里面我有一系列函数。但是当我创建对象时,我无法调用嵌套函数。user.searchBooks.AuthorBooks()(其中用户是对象的实例)不起作用。我不知道我是否做错了。有没有其他访问函数的方法

class User():
def __init__(self):
    self.ID = None
    self.Firstname = None
    self.Surname = None
    self.username = None
    self.email = None

def searchBook(self):
    '''Searching Books with given query'''
    def AuthorBooks(self, aFirstname, aLastname, Type):
        """Query based on Author Searches - returns books with particular author """
        if Type == 'All':
            query = ("""
            SELECT * FROM tblBooks;
            SELECT * FROM tblAuthor;
            SELECT cb.Name, cb.Genre, cb.Year_Published, ca.Firstname, ca.Surname
            FROM tblBooks as cb
            INNER JOIN tblAuthor ca on cb.AuthorID = ca.AuthorID
            WHERE (UPPER(ca.Firstname)) = (UPPER(?)) or (UPPER(ca.Surname) = UPPER(?));""")
        elif Type == 'Loaned Books':
            query = ("""
            SELECT tblBooks.Name, tblAuthor.Firstname, tblAuthor.Surname, tblBooks.BookID, tblLoans.Expiry_Date
            FROM tblLoans
            INNER JOIN (tblBooks INNER JOIN tblAuthor ON tblBooks.AuthorID = tblAuthor.AuthorID) ON tblBooks.BookID = tblLoans.BookID
            WHERE ((UPPER(tblAuthor.Firstname) = UPPER(?)) or(UPPER(tblAuthor.Surname) = UPPER(?)) AND tblLoans.Date_of_Return IS NULL;
            """)
    
        cursor.execute(query, [(aFirstname), (aLastname)])

        return cursor.fetchall()

【问题讨论】:

    标签: python database function oop


    【解决方案1】:

    由于函数AuthorBooks() 是在searchBook() 内部定义的,因此无法从searchBook() 函数外部访问它。 (函数内部定义的所有变量和函数通常只能在定义它们的函数内部访问)

    为了使您的代码正常工作,您可以将AuthorBooks() 定义为一个单独的函数并使用user.AuthorBooks() 直接访问它。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多