我的讲师写了一些代码而且我不知道如何阅读它并且谷歌没有帮助,有人可以澄清这段代码如何互动。
yield Arc(tail_node, head = tail_node - 1, label="1down", cost=1)
方法是否为类
调用class Arc(namedtuple('Arc', 'tail, head, label, cost')):
Arc类不包含任何方法,也没有__init。我不知道这两个是如何交互的,因为我认为类参数接受了另一个类,并且它使当前类成为子类或抽象等。
答案 0 :(得分:0)
collections.namedtuple
函数是一个类工厂。它需要一些参数并返回一个类。该类继承自tuple
,但其值也可以通过名称作为属性访问(不仅仅是索引)。
您展示的Arc
类使用namedtuple
来创建其基类。您可以使用单独的语句等效地编写它,为基类提供它自己的名称:
Base = namedtuple('Arc', 'tail, head, label, cost') # this creates a class
class Arc(Base): # this class inherits from the base class
pass
如果Arc
类没有自己的任何方法,那么定义它就没有多大意义(你只需使用名称{{对于从Arc
返回的类,1}}而不是Base
。我猜测namedtuple
课程中还有更多代码,与您的问题无关。从基类继承的行为足以使用位置或关键字参数创建实例,因此您显示的Arc
语句不需要任何其他代码。