gpt4 book ai didi

python - 递归{pattern} 替换/使用对象的属性

转载 作者:行者123 更新时间:2023-12-04 09:38:37 25 4
gpt4 key购买 nike

我想使用对象的属性进行递归模式替换。由于在类定义时不知道对象的属性,我不能使用 @property 装饰器

示例

class Test():
def __init__(self):
self.date = '{year}-{month}'
self.year = '2020'
self.month = '06'

self.path = '/dev/null'
self.file_name = 'ABC-{date}.mp4'
self.file = '{path}/{file_name}'

def print(self):
print(__class__)
print ("Filename is {file_name}".format(**vars(self)))
print ("File {file} will be written to {path}".format(**vars(self)))

t = Test()
t.print()

实际产量
<class '__main__.Test'>
Filename is ABC-{date}.mp4
File {path}/{file_name} will be written to /dev/null

所需输出
<class '__main__.Test'>
Filename is ABC-2020-06.mp4
File /dev/null/ABC-2020-06.mp4 will be written to /dev/null

最佳答案

您提到了递归,但实际上并没有在您的代码中使用任何递归。

您可以通过实现格式化给定模板字符串的递归方法来实现所需的行为,直到呈现的结果与输入相同:

def render(self, template):
rendered = template.format(**vars(self))
return rendered if rendered == template else self.render(rendered)

def print(self):
print(self.render("Filename is {file_name}"))
print(self.render("File {file} will be written to {path}"))

通过上述更改,您的代码将输出:
Filename is ABC-2020-06.mp4
File /dev/null/ABC-2020-06.mp4 will be written to /dev/null

关于python - 递归{pattern} 替换/使用对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62432864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com