我正试图解开adventofcode之谜,但今年我决定抓住机会学习一种新的编程语言:Python。 由于我已经了解了其他的OOP语言,如java和C++,所以我立即为解决方案对象创建了一个“接口”系统。p>
我目前的项目设置如下:
现在我想要的是通过主类动态输出解决方案,它基本上必须调用/solutions/目录中每个dayX.py类的all.solve()方法
我想我是下一个要做的人,但我犯了一个错误:
Traceback (most recent call last):
File "C:\Users\siste\j-workspace\adventofcode2020\main.py", line 16, in <module>
print(solution.solve())
TypeError: solve() missing 1 required positional argument: 'self'
这是我的档案:
main.py
import os
def days():
classes = []
path = "C:\\path"
for file in os.listdir(path):
if(file.startswith("day")) :
classes.append(str(file.replace(".py", "")))
return classes
if __name__ == '__main__':
for day in days() :
solution = getattr(__import__(str("solutions." + day)), day.replace("d", "D"))
print(solution.solve())
solution.py
path = "C:\\path\\inputs\\day{}.txt"
class Solution:
def __init__(self, dayNumber):
self.dayNumber = dayNumber
self.inputPath = path.format(self.dayNumber)
def part1(self):
pass
def part2(self):
pass
def solve(self):
return ("Day {} Solutions: \n\tPart1: {}\n\tPart2: {}"
.format(self.dayNumber, self.part1(), self.part2()))
第1天
import fileinput
from solutions.solution import Solution
class Day1(Solution):
def __init__(self):
super().__init__(1)
def part1(self):
return "sol"
def part2(self):
return "sol2"
在导入的模块上使用
getattr
时,将获得类定义。方法只能在类实例上调用,否则会抛出您看到的错误:以这种方式更改
__main__
部分可以解决以下问题:相关问题 更多 >
编程相关推荐