【发布时间】:2021-11-28 11:25:30
【问题描述】:
在以下示例中,MyExample 类读取文件名中包含下划线的文件名列表。
class MyExample(object):
def __init__(self, location: str):
self.location = location
def get_file_names(self):
# For simplicity, lets just return an example of the output
return ["my_file_name_01.txt", "my_file_name_02.txt"]
def get_file_name_number(self):
# Idem as before.
return ["file_name_01.txt", "file_name_02.txt"]
def get_file_size(self):
# It does not return a list of strings so the desired
# property or function will not be applied here
return [3800, 4000]
代码执行时,结果是
my_object = MyExample("./a/random/path")
print(my_object.get_file_names())
print(my_object.get_file_name_number())
print(my_object.get_file_size())
# The results:
['my_file_name_01.txt', 'my_file_name_02.txt']
['file_name_01.txt', 'file_name_02.txt']
[3800, 4000]
现在,我想找到一种应用函数或属性(我们称之为to_dot)的方法,它可以替换get_file_names() 和@987654326 输出中的点的下划线@。
最终代码应该返回类似
# Calling this function with .to_dots
my_object.get_file_names().to_dots
["my.file.name.01.txt", "my.file.name.02.txt"] # <-- The desired output
# Calling this function with .to_dots
my_object.get_file_name_number().to_dots
["file.name.01.txt", "file.name.02.txt"] # <-- The desired output
# Calling this function with .to_dots
my_object.get_file_name_number().to_dots
AttributeError # # <-- The desired output ... or something similar
有没有办法将to_dots 添加到MyExample 类中,以替换里面某些方法的下划线?
我对装饰器不是很熟悉,但我怀疑可能有一个技巧可以做到这一点。到目前为止,我没有成功尝试使用@property,但据我所知,有很多类型的装饰器......或者也许它可以在没有装饰器的情况下完成,我很迷茫。
谢谢。
【问题讨论】:
-
您的问题是如何编写一个用点替换下划线的函数,或者如何将任何函数应用于列表中的所有项目,或者如何编写装饰器来转换方法的返回值有什么功能吗?
-
@mkrieger1。我知道使用
str.replace我可以将_更改为.并且使用理解列表(或许多其他方式)我可以将替换应用于所有项目。我的问题是如何向类中的某些方法添加函数。谢谢。 -
我会让
to_dots成为一个接受列表的独立函数。然后像这样调用它:to_dots(my_object.get_file_names())这更灵活,因为现在您可以在任何您想要的列表对象上使用它。不仅仅是这个类返回的。
标签: python oop python-decorators