在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交换给定字符串的顺序并对其进行连接。这非常有帮助,谢谢!我确实觉得这个任务也有点奇怪,这就是为什么我想知道。