【发布时间】:2015-04-05 20:01:26
【问题描述】:
如果这是一个骗局,请提前道歉;我搜索“_curried python”得到了 14 个结果,然后简单地 _curried”,结果只增加了 33 个,似乎没有任何帮助......
问题:我今天在我们的代码库中发现了我最初认为是一个错字,这里是嫌疑人:
student.recalculate_gpa()
现在,我怀疑这是一个错字,因为student 是一个没有recalculate_gpa 方法的Student 类的实例。但是,它确实有一个calculate_gpa 方法:
class Student(User):
...
def calculate_gpa(self):
# some calculations...
(User 是标准的 django 用户类。)但是,代码没有出错,这对我来说毫无意义。所以我做了一个检查,发现了这个:
... (a bunch of methods)
('calculate_gpa', <unbound method Student.calculate_gpa>),
... (some more methods)
('recalculate_gpa', <unbound method Student._curried>),
奇怪,recalculate_gpa 是其实是一种方法。但它到底是从哪里来的呢?我在我们的代码库中搜索了“_curried”,但什么也没找到,所以这一定是一些与 Django 相关的行为。当然,我希望在我们项目的某个地方,我们已经描述了动态命名函数是如何形成的,因为 recalculate 似乎是 calculate 的合理派生,但老实说,我不知道从哪里开始。
因此,我的问题是:像上面那样的柯里化方法是如何生成的,我应该从哪里开始寻找我们自己的代码库是如何柯里化的?
提前致谢!
【问题讨论】:
-
你继承的
User是什么? -
抱歉,这是标准的 django 用户类
-
有类装饰器之类的吗?
-
学生周围没有装饰器
-
这是 Django 相关的,而不是“内置 Python 行为” - github.com/django/django/blob/master/django/utils/…