- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在为我的 Django 项目开发一个基本的 python 类-子类系统,但我遇到了一个奇怪的问题。
首先,类的定义:
文件classes.py
class BaseAd(object):
""" base class for all the ads, with common parameters """
def __init__(self, dom, web, loc, cc, a, c, date, desc, hl, **kwargs):
self.domain = self.doDomain(dom)
self.url = self.doUrl(web)
self.description = self.doDescription(desc, hl)
self.location = self.doLocation(a, c, loc)
self.date = self.doDate(date)
文件 jobs.py
class JobAd(BaseAd):
""" extends BaseAd with more parameters """
def __init__(self, domain, url, location, countrycode, area, city,
index_date, description,
contract_multivalue, salary_min, company, job_title, **kwargs):
self.contract_type = self.doContract(contract_multivalue)
self.salary = self.doSalary(salary_min)
self.company = self.doCompany(company)
self.title = self.doTitle(job_title)
""" Super constructor call """
super(JobAd, self).__init__(
domain,
url,
location,
countrycode,
area,
city,
index_date,
description,
**kwargs
)
这两个类都有各自的方法(doDomain、doSalary 等),这些方法现在无关紧要,因为它们只是返回作为输入获得的字符串(将来会更好地实现,现在只是不需要)。 kwargs只是用来存储一些无用但仍然返回原始字典的参数(否则我会得到一个错误)
JobAd 类用作我们的 python-to-solr 接口(interface)的构造函数参数 sunburnt 。定义一个类并将其传递给该方法后,它将 solr 响应(只是一个字典)中定义的字段转换为该类。因此,JobAd 的 init 中定义的参数必须与 solr 模式中的定义具有相同的名称。
这是实际的构造函数调用:
/path/to/myapp/resultsets/views_json.py in job_search_json
#lines splitted for better reading
#res is a solr search object
items = res.paginate(start=start, rows=res_per_page)
.sort_by("-index_date")
.sort_by("-score")
.sort_by("-md5")
.sort_by("-posted_date")
.execute(constructor=JobAd)
堆栈跟踪中的下一个是:
/path/to/sunburnt-0.6-py2.7.egg/sunburnt/search.py in execute
return self.transform_result(result, constructor)
...
▼ Local vars
Variable Value
self sunburnt.search.SolrSearch object at 0x7f8136e78450
result sunburnt.schema.SolrResponse object at 0x7f8136e783d0
constructor class 'myapp.models.jobs.JobAd'
最后
/path/to/sunburnt-0.6-py2.7.egg/sunburnt/search.py in transform_result
result.result.docs = [constructor(**d) for d in result.result.docs]
在最后一个“本地变量”选项卡中,有结果字典(只是结构,而不是带有值的完整字典):
self sunburnt.search.SolrSearch object at 0x7f8136e78450
d {'area':
'city':
'contract_multivalue':
'country':
'countrycode':
'currency':
'description':
'district':
'domain':
'fileName':
'index_date':
'job_experience':
'job_field_multivalue':
'job_position_multivalue':
'job_title':
'job_title_fac':
'latitude':
'location':
'longitude':
'md5':
'salary_max':
'salary_min':
'study':
'url':
'urlPage':
}
constructor class 'tothego_frontend.sito_maynard.models.jobs.JobAd'
在 django.log 文件中,没有其他错误,除了 DogSlow 陷阱除了捕获的行之外没有任何其他错误。
这是我遇到的错误:
TypeError at /jobs/us/search/
__init__() takes exactly 13 arguments (12 given)
我期望的行为并不是我实际经历的行为:它不是让我的类调用其父级的构造函数(10 个参数),而是使用自己的 init(14 个参数)。
我也一直在尝试使用旧的Python类定义:父类(super class)中没有“对象”;在子类的init内部,父类被初始化为BaseAd.init(self,...);我也一直在尝试调用 super 方法作为子类 init (a la java)中的第一个语句,但似乎没有任何改变。
我在这里做错了什么?
编辑:我修复了第二个初始化行的长度,有点太多了!
根据要求添加了 DJANGO 的堆栈跟踪信息
最新观点:我开始假设 sunburnt 不支持类继承,即使文档中没有任何相关内容。
新编辑:经过今天的一些测试,这是我发现的(到目前为止)
现在它总是缺少一个参数。也许是“自己”?我真的不知道该再看哪里了,错误与以前相同(相同的堆栈跟踪),只是不同的错误参数。
发现问题实际上,向初始化参数添加一些默认值帮助我发现了真正的错误:输入中缺少字段。抱歉耽误了大家的时间,再次感谢您的咨询
最佳答案
我已经采用了您的代码(从 __init__
中删除了 do*
方法)并变成了一个更简单的示例,以尝试在您陈述时重新创建您的问题.
class BaseAd(object):
""" base class for all the ads, with common parameters """
def __init__(self, dom, web, loc, cc, a, c, date, desc, hl, **kwargs):
self.domain = dom
self.url = web
self.description = desc
self.location = loc
self.date = date
class JobAd(BaseAd):
""" extends BaseAd with more parameters """
def __init__(self, domain, url, location, countrycode, area, city,
index_date, description, solr_highlights,
contract_type, salary, company, job_title, **kwargs):
self.contract_type = contract_type
self.salary = salary
self.company = company
self.title = job_title
""" Super constructor call """
super(JobAd, self).__init__(
domain,
url,
location,
countrycode,
area,
city,
index_date,
description,
solr_highlights,
**kwargs
)
j = JobAd(1,2,3,4,5,6,7,8,9,10,11,12,13,kwarg1="foo",kwarg2="bar")
运行 python 2.7.2 时,执行正常,没有错误。我建议错误中引用的 __init__
可能是 JobAd
而不是 super,因为 JobAd
的 init 实际上有 14 个参数,其中是错误所提示的。我建议尝试找到一个调用 JobAdd 的 __init__
且参数数量不足的地方。
正如其他人所说,发布完整的堆栈跟踪并显示 JobAd 的使用方式对于确定根本原因非常宝贵。
关于Python继承: init is having an issue with the number of params,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952104/
我不知道我做了什么来破坏我的 QtCreator,但是“突然”我所有的编译器问题(警告/错误)不再显示在问题面板中,而是只显示在“编译输出”面板中(我在那里不能使用它们通过单击跳转到错误代码)。 在“
我正在制作游戏作为自学。 我的目标是在鼠标指针后面有一条轨迹。(这有效)但是,当我在 chrome 上打开并运行它时。在达到一定的高度和宽度后,轨迹保留在 Canvas 上而不是被擦掉。谁能帮我解决这
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我一直在尝试将背景图像添加到 html 文档中元素的边框: 你可以在这里看到:HTML: Something CSS: a { border-width:10px; border-co
我即将开始一个连接两个程序的项目,一个用c#,一个用c++。我已经有一个可以工作的 c# 程序,它能够与自身的其他版本对话。在开始使用c++版本之前,我想到了一些问题: 1) 我正在使用 protob
我正在尝试线程优先级的影响,当 run 方法中的 println 保留在注释中时,两个线程同时结束,我不理解这种行为,你能解释一下吗?谢谢。 主类 public class Main { public
jQuery 1.4: $('#menu li:last:not(.ignore)').addClass('last'); HTML: item 1 ite
当我创建或查看问题时,我想从Mantis问题跟踪系统中删除选择配置文件及其所有随附字段,因为这些问题与我要创建的任何问题都不相关。 其中包括配置文件部分随附的“平台”,“操作系统”和“操作系统版本”字
我不在Master分支上工作。我正在开发另一种newFeature,该功能也发布在github上。 我知道在处理Master分支时如何解决问题:Closes #XXX。 但是,这仅在我在Master分
我需要在一些UICollectionViewCell中画一个圆圈。具有不同颜色边框和背景颜色的圆圈。我的代码。 UICollectionViewController - (UICollectionVi
我们将Trac用于我正在从事的开源项目。我想将所有公开票导出到Github的Issues。我已经找到了一些可能的小型脚本,但是我想知道是否有人这样做并提出了建议。 理想情况下,它将trac的描述语法转
我对 iOS 编程还比较陌生,但在其他语言(主要是 C# 和 Java)方面拥有丰富的编程经验。 我正在尝试为 iPad 设备的某些产品制作一个类似图片库的东西,其中包含指定的类别。用户界面非常简单,
我已经在中间人中激活了 I18n,如下所示: activate :i18n, mount_at_root: :de 现在我想自动从 / 重定向到 /de。这可能吗? 另外,我想知道为什么中间人使用 p
我已经成功编写了一个程序,可以从 Excel 文件中读取数据并将它们存储在 mysql 的表中。我的程序读取每个文件的第一行,创建表的字段,并将其余数据存储为每列中的值。正是因为这种情况以编程方式发生
这是我的代码。 function m1() { return new Promise(function(resolve, reject) { var files = $('#aws-upl
谁能告诉我这是怎么回事? #include #include #include #include #include class writeManager { std::vector
compile 'com.github.RogaLabs:social-login:1.2.1' compile 'com.github.mukeshsolanki:social-login-help
我有一个巨大的 csv 文件,其中包含 149 列 和 25K+ 行,可以在 MySQL 中上传该文件> 我正在使用MySQL LOAD DATA 查询 表我的查询是: LOAD DATA local
我是一名优秀的程序员,十分优秀!