我试图实现下面这个重复的代码块,方法是用从列表中获取的名称创建对象,而不是重复创建对象和传递实例。在
class waittill:
def __init__(self,path):
self.imagepath = os.path.join("C:\python\python_projects\pyautogui\images", path)
loaded=waittill("loaded.png")
agree=waittill("agree.png")
firstname=waittill("firstname.png") #This works absolutely fine
loginid=waittill("loginid.png") #I wish repetition could be avoided
password=waittill("password.png")
loginbutton=waittill("loginbutton.png")
customerlist=waittill("customerlist.png")
loginpage=waittill("loginpage.png")
customerinfo=waittill("customerinfo.png")
profile=waittill("profile.png")
有没有可能编写一个更优雅的代码,比如在列表中循环创建对象
^{pr2}$
我明白你的情况,但换一种方法是有意义的:将变量名硬编码,因为你将引用它,并使用文件夹和sufix信息来获取图像文件名。在
在3.6之前的Python中,项目也无法自动猜出它所分配的名称(尽管可以用元类完成),因此将对象创建为字典,然后用dict内容填充模块可能是一个选项:
names=['loaded','agree','firstname','loginid','password','loginbutton','logout','middlename','lastname','submit','customerlist','loginpage','customerinfo','profile']
(请注意代码中另一个难以调试的问题:如果坚持使用
\
作为路径分隔符,则应在包含路径的字符串前面加上r"
-否则,如果文件夹以n、t和其他字母开头,则路径将失败。在另外,我使用}
^{2}$globals()
在模块名称空间中自动设置名称,但这不是一个好的实践。您可以使用一个类作为名称空间来完全相同-在这种情况下,只需将上面的代码放在一个类主体中(而不是在方法内部),并使用locals()
而不是{字典理解有助于:
要访问特定对象,请说“agree”,只需为image_objects字典编制索引,如下所示:
^{2}$相关问题 更多 >
编程相关推荐