如何使用元类和命令行调用python类

2024-04-26 07:31:20 发布

您现在位置:Python中文网/ 问答频道 /正文

此时此刻,我有这样一件事:

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()

从命令行调用这个类更好吗?我考虑了模式策略,但我不确定这是如何实现的。 将来我会有更多的课。你知道吗


Tags: selfparseriffooinitdefargsvariable
1条回答
网友
1楼 · 发布于 2024-04-26 07:31:20

抽象基类是为了澄清大型代码库中类和方法的语义,而不仅仅是在基类中作为运行时强制执行的“注释”,即某些方法必须在派生类中实现。你知道吗

给出您的代码示例,您似乎仍在学习使用class以及Python和编程中的相关构造。可以肯定地说,您的代码不需要使用abc或ABCMeta,当您对类和对象的工作方式有了明确的了解之后,您就可以重新使用它们了。你知道吗

只需省去所有内容—编写代码时不要从abc、没有@abstractmethod修饰符和没有metaclass=声明进行任何导入—您可能在下面的一些示例代码中看到了这些内容,但在现阶段它们不会起到任何作用。你知道吗

尽管如此,上面的代码还是会被破坏的(如果你修复了缩进语法,这会使它立即变得更加破坏)@abstractmethod的思想就是当类被实例化时,不应该在类中存在任何抽象方法。它仅用于在基类上标记派生类中必须重写(overiden)的方法。所以类“A”和“B”不应该将todo方法修饰为“abstract”,这样才能运行。你知道吗

另外,当您在self.todo()方法内部执行self.todo()操作时,您将在一个直接的无限递归循环中从B.todo方法对自身进行调用。正确的模式应该是super().todo()。你知道吗

相关问题 更多 >