模拟继承的方法

2024-09-28 05:22:55 发布

您现在位置:Python中文网/ 问答频道 /正文

请原谅我的noob状态,但是我遇到了一个我不太理解的结构,希望有人能为我解释一下。在

class Base(object):
    def mogrify(self, column):
        return self.mogrifiers.get(column.lower().strip()) or (lambda x: x)

。。。在

^{pr2}$

。。。在

class MyOtherClass(object):
    def convert_columns:
        ...
        new_row[colkey] = self.myclass.mogrify(colkey)(value)

这一切都可以,但我正在尝试编写一个单元测试并模拟MyClass。在

据我所知,mogrifiers返回一个包含所有列和所需转换的字典。在

我测试的代码调用mogrify(从基类继承)字符串中有一个特定的列名。在

这将尝试从字典中提取列并返回lambda函数?或者如果字典中不存在它,它会返回一个lambda来返回字符串?在

所以在我要测试的代码中只剩下(value)位。不清楚它是干什么的。在

如果我不想测试底层的转换/转换,mock可以返回简单的lambda。在

所以我已经这么做了,但在给莫格里菲的电话中却出现了一个例外:

E TypeError: 'str' object is not callable

有人能提供一些线索吗?在


Tags: lambda字符串代码self字典objectvalue状态
1条回答
网友
1楼 · 发布于 2024-09-28 05:22:55

As far as I can tell, mogrifiers returns a dictionary of all the columns and any transformations that are required.

这是正确的,尽管正如你所展示的那样,它每次都会创建一个新的字典,这似乎是不必要的。在

The code I am testing calls mogrify (inherited from the Base class) with a specific column name in a string.

This tries to extract the column from the dictionary and returns the lambda function ? or if it doesn't exist in the dictionary, it returns a lambada that just gives the string back ?

是的,这也是正确的(除了lambada是一种舞蹈,但我想你是指lambda)。在

So that just leaves me with the (value) bit in the code I'm trying to test. It's no clear what it does.

{{cda>只返回调用。如果我这样重写,可能会更清楚:

fn = self.myclass.mogrify(colkey)
new_row[colkey] = fn(value)

将其拆分为两行也可以使问题更清楚是调用self.myclass.mogrify(colkey)还是{}。如果很可能是fn(value)调用,则表示mocked mogrify返回的是一个str,而不是返回一个可调用的;但是,也可能是因为您弄错了mock,mogrify方法实际上是一个字符串。在

我建议您重写如图所示,并在两行之间插入一个print,看看实际返回的是什么。在

相关问题 更多 >

    热门问题