python - 在类中设置可在运行时修改的静态字典的 Pythonic 方法是什么?

标签 python python-3.x

我正在替换类中的静态方法:

class Foo(object):

    @staticmethod
    def num_examples(subset='train'):
        if subset == 'train':
            return 6200
        elif subset == 'validation':
            return 1900
        elif subset == 'test':
            return 1900
        else:
            raise ValueError('Invalid data subset "%s"' % subset)

我希望 num_examples 位于一个由静态方法调用的字典中,该静态方法具有与当前 num_examples 方法相同的签名,但可以在运行时初始化。

Foo.num_examples('bar', 86) 
print(Foo.num_examples('bar'))

我使用的是 Python 3.x。

最佳答案

这是并且永远是语法错误:

Foo.num_examples('bar') = 86

您不能分配给 Python 中的函数调用。您必须调整代码才能像使用字典一样使用字典。

Foo.num_examples['bar'] = 86

您仍然可以为“获取”部分编写遗留接口(interface),但“设置”部分无法按照您的要求完成。为了提供遗留接口(interface),您可以定义并使用“可调用字典”:

import warnings

notset = object()

class MyDict(dict):
    def __call__(self, key, val=notset):
        if val is notset:
            warnings.warn('this syntax is deprecated')
            return self[key]
        else:
            self[key] = val

关于python - 在类中设置可在运行时修改的静态字典的 Pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50935092/

相关文章:

python - 返回最长摆动子数组

python-3.x - Python交互式外壳类型应用程序

python - 曲面上的建模点

python - 通过 python 的 matplotlib.pyplot.contourf 分散 x,y,z

python - QDataWidgetMapper-在pyqt中查找sql​​ite数据库行的索引

python - 使用 Python 的 "from"关键字?

Python在父目录中找不到模块

python - PyQt5区分ok和cancel命令

python - 如何计算数据框中所有等于条件的选定单词?

python - 用 cython 声明一个 numpy 数组会奇怪地产生大量开销