[英]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.