动态生成的类实例

时间:2018-04-15 10:07:23

标签: python class

我想存储我计划稍后用于使用PyPDF2在我的计算机上对pdfs进行排序的值。 我想如果我创建了一个类并为每种类型的文件存储了标识信息(例如描述符,该文件唯一的字符串,以后可以通过PyPDF2找到,例如帐号,以及文件的路径应该转移到)这将工作。像这样:

class File_Sort(object):
def __init__(self, identifier, file_text, file_path):
    self.identifier = identifier
    self.file_text = file_text
    self.file_path = file_path

所以我的一个示例输入是:

filetype0001 = File_Sort("Phone Bill", "123456", "/Users/Me/PhoneBills/")

我希望能够让用户通过一系列raw_input问题生成新的文件类型,但我无法计算如何生成变量来创建新实例,以便我可以得到:

filetype000 [自动递增数字] = File_Sort(UserResponse1,UserResponse3,UserResponse3)。

创建" filetype000 [自动递增数字]"文本本身似乎很容易:

file_number += 1
file_name = "filetype" + str(file_number).zfill(4)

但是如何将生成的file_name字符串转换为变量并填充它?

2 个答案:

答案 0 :(得分:0)

听起来你想要动态创建变量。这几乎总是愚蠢的事情。相反,您应该使用像列表或字典这样的数据结构,并由您想要动态生成的变量名称部分编制索引。

因此,不是创建名为filetype000的列表,而是从名为filetypes的列表开始,并附加内部列表,这样您就可以filetypes[0]来实现它。或者,如果字符串名称对您的特定应用程序更有意义,请让filetypes成为字典,并使用filetypes['pdf']之类的内容访问内部列表。

我在这里有点模糊,因为我并不真正理解你所有的伪代码。你的例子的[automatically incrementing number]部分的目的是什么并不明显,所以我或多或少地忽略了这些部分。您可能只想从一个空列表和append值开始,而不是以某种方式将其初始化为特定大小并对其进行神奇索引。

答案 1 :(得分:0)

所以这就是我最终使用的内容:

file_descriptor = []
file_string = []
file_location = []

filetype_new = len(file_descriptor)

input_descriptor = raw_input("What is the description of the new file type? ")
file_descriptor.append(input_descriptor)
input_filestring = raw_input("What is unique string to search for in this file type? ")
file_string.append(input_filestring)
input_filelocation = raw_input("where should we put this file type? ")
file_location.append(input_filelocation)

print("file%s: %s, \t%s, \t%s" % (str(filetype_new+1).zfill(4), file_descriptor[filetype_new], file_string[filetype_new], file_location[filetype_new]))

review = raw_input("\nWould you like to review the current files? y/n ").lower()
while review not in "yn":
    review = raw_input("Sorry, I don't understand. Would you like to review your file types? y/n ").lower()
print("There are currently sort instructions for %s filetypes: " %  (len(file_descriptor)))
file_increment = 0
while file_increment in range(0, len(file_descriptor)):
    print("file%s: %s, \t%s, \t%s" % (
    str(file_increment + 1).zfill(4), file_descriptor[file_increment], file_string[file_increment],
    file_location[file_increment]))
    file_increment += 1

感谢您的建议。