Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中重写类的格式并设置其模式_Python_Python 3.x - Fatal编程技术网

在Python中重写类的格式并设置其模式

在Python中重写类的格式并设置其模式,python,python-3.x,Python,Python 3.x,作为任务的一部分,我必须以某种方式重写类的格式调用 此代码旨在工作: obj=class() obj.format('mode_name').format('arg1','arg2') 然后使用set模式返回参数的自定义格式结果。例如,模式顺序以相反的顺序返回给定字符串,并用“,”连接它们。 感觉上我缺少了一些非常基本的东西,但我找不到任何允许此功能的东西。对于对象的格式方法,要返回本身具有格式方法的东西,您可能需要创建另一个类 class Formatter: def __init_

作为任务的一部分,我必须以某种方式重写类的格式调用

此代码旨在工作:

obj=class()
obj.format('mode_name').format('arg1','arg2')
然后使用set模式返回参数的自定义格式结果。例如,模式顺序以相反的顺序返回给定字符串,并用“,”连接它们。
感觉上我缺少了一些非常基本的东西,但我找不到任何允许此功能的东西。

对于对象的
格式
方法,要返回本身具有
格式
方法的东西,您可能需要创建另一个类

class Formatter:
    def __init__(self, mode: str) -> None:
        self._mode = mode

    def format(self, *args: str) -> str:
        if self._mode == 'spaces':
            return ' '.join(args)
        elif self._mode == 'commas':
            return ', '.join(args)
        raise ValueError(f"invalid formatting mode {self._mode}")


class Foo:
    def format(self, mode: str) -> Formatter:
        return Formatter(mode)


foo = Foo()
print(foo.format("commas").format('arg1', 'arg2'))
# arg1, arg2
如果第一个
格式
返回一个可以直接调用的函数,而不是使用单个方法调用的对象,则可能会更容易;这将允许您简单地定义内联函数,如果格式化逻辑相对简单,那么这可能更可取。(对于IMO来说,将代码与两个执行完全不同的操作的
格式
方法结合在一起也有点让人困惑!)下面是可能的情况:

class Foo:
    def format(self, mode: str) -> callable:
        def formatter(*args: str) -> str:
            if mode == 'spaces':
                return ' '.join(args)
            elif mode == 'commas':
                return ', '.join(args)
            raise ValueError(f"invalid formatting mode {mode}")
        return formatter


foo = Foo()
print(foo.format("commas")('arg1', 'arg2'))
# arg1, arg2

您可能不想给类命名
class
。。。你能给出一些输出应该是什么样子的例子吗?obj和类只是例子,但你是对的,我应该选择不同的。输出为格式化字符串,具体取决于模式。例如,mode order交换给定字符串的顺序并对其进行连接。这非常有帮助,谢谢!我确实觉得这个任务也有点奇怪,这就是为什么我想知道。