此时此刻,我有这样一件事:
from abc import ABCMeta, abstrachmethod
class MainClass(metaclass=ABCMeta):
def __init__(self, args):
print(work)
def do(self):
print("Do")
@abstractmethod
def todo(self):
"comment"
class A(MainClass):
def __init__(self,args):
super(MainClass,self).__init__()
def todo(self):
print("nanananananana batman!")
class B(MainClass):
def __init__(self,args):
super(MainClass,self).__init__()
def todo(self):
print("Spaghetti code!")
self.do()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-variable", default=1)
parser.add_argument("-because",default="non important")
args = parser.parse_args()
if args.variable == 1:
foo = A(args)
foo.todo()
elif args.variable == 2:
foo = B(args)
foo.todo()
从命令行调用这个类更好吗?我考虑了模式策略,但我不确定这是如何实现的。 将来我会有更多的课。你知道吗
抽象基类是为了澄清大型代码库中类和方法的语义,而不仅仅是在基类中作为运行时强制执行的“注释”,即某些方法必须在派生类中实现。你知道吗
给出您的代码示例,您似乎仍在学习使用
class
以及Python和编程中的相关构造。可以肯定地说,您的代码不需要使用abc或ABCMeta,当您对类和对象的工作方式有了明确的了解之后,您就可以重新使用它们了。你知道吗只需省去所有内容—编写代码时不要从
abc
、没有@abstractmethod
修饰符和没有metaclass=
声明进行任何导入—您可能在下面的一些示例代码中看到了这些内容,但在现阶段它们不会起到任何作用。你知道吗尽管如此,上面的代码还是会被破坏的(如果你修复了缩进语法,这会使它立即变得更加破坏)
@abstractmethod
的思想就是当类被实例化时,不应该在类中存在任何抽象方法。它仅用于在基类上标记派生类中必须重写(overiden)的方法。所以类“A”和“B”不应该将todo
方法修饰为“abstract”,这样才能运行。你知道吗另外,当您在
self.todo()
方法内部执行self.todo()
操作时,您将在一个直接的无限递归循环中从B.todo
方法对自身进行调用。正确的模式应该是super().todo()
。你知道吗相关问题 更多 >
编程相关推荐