簡體   English   中英

Python中的繼承:缺少1個必需的位置參數:“ self”

[英]Inheritance in Python: missing 1 required positional argument: 'self'

我有以下課程:

模型

from priceChecker.priceChecker import db

class Model():

    def __init__(self, tableName):
        self.__tablename__ = tableName

    def getAll(self): #, conditions=[]
        try:
            print('Executing query for table: ' + self.__tablename__)
            result = db.execute("SELECT * FROM " + self.__tablename__)
            return result
        except ValueError:
            print("Oops, something went wrong sucker!...")

和item.py

from priceChecker.core.models.model import Model

class Item(Model):

    def __init__(self):
        print('\n\nInitializing Item model...')
        super().__init__('orders')

    def getAllItems(self):
       items = Model.getAll()
       return items

我的控制器ItemController.py

from priceChecker.core.models.item import Item

class ItemController:

    def __init__(self):
        self.item = Item()

    def retrieveItems(self):
        #allItms = 'a'
        allItms = self.item.getAllItems()
        return allItms

運行此命令時,出現以下錯誤:

Builtins.TypeError TypeError:getAll()缺少1個必需的位置參數:'self'

我可以通過在item.py的此調用中添加self來解決此問題:

items = Model.getAll(self)

但是我的問題是:為什么我必須將self作為參數傳遞? 由於它是從模型擴展而來的,有沒有一種方法可以調用getAll而不傳遞self?

如果您直接從類對象訪問函數,那么它實際上不是方法,它只是一個函數,您必須傳遞在函數定義的簽名中指定的參數,否則,就像任何其他函數一樣,它會引發錯誤。 僅當您通過實例訪問該函數時,才會啟動描述符協議 ,將該實例綁定到該方法,實際上返回一個新的部分應用的函數,即綁定方法對象。 因此,您需要執行以下操作:

items = self.getAll()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM