【发布时间】:2018-09-16 01:19:39
【问题描述】:
我有以下课程:
模型.py
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() missing 1 required positional 参数:“自我”
我可以通过在 item.py 中将 self 添加到这个调用中来解决它:
items = Model.getAll(self)
但我的问题是:为什么我必须将 self 作为参数传递?由于它是从模型扩展而来的,有没有办法在不传递 self 的情况下调用 getAll?
【问题讨论】:
-
将
items = Model.getAll()更改为items = self.getAll()。您的解决方案不够用 -
调用基类的方法和调用你自己的方法是一样的——
Item是Model,所以你可以用self.getAll()来调用继承的getAll方法。 -
在幕后,
self.getAll()和type(self).getAll(self)做几乎相同的事情——但第一个显然更短,更清晰,而且在细微的不同之处,它几乎总是正确的一。
标签: python python-3.x