子类化rustworkx.PyGraph时super().__init__传参报错求助
子类化rustworkx.PyGraph时的关键字参数问题解决
问题原因
从你提供的PyGraph类型定义能看到,__init__方法参数列表里的/是位置-only参数的标记,这意味着multigraph参数只能通过位置传递,不能用关键字参数的形式传入。
你在子类__init__里用super().__init__(multigraph=multigraph)时,Python会把multigraph=xxx当作命名参数传递,但PyGraph的底层Rust实现只接受位置参数,因此触发了object.__init__() takes exactly one argument的错误——本质是参数传递方式不匹配。
另外,multigraph是Rust内部维护的只读属性,无法通过直接赋值修改,所以第二个尝试也会失败。
修复方案
调用父类构造器时,把multigraph作为位置参数传递即可:
import rustworkx class Graph(rustworkx.PyGraph): def __init__(self, multigraph=False): # 用位置参数传递multigraph,而非关键字参数 super().__init__(multigraph) regular_graph = rustworkx.PyGraph(multigraph=False) print(f"The first graph is a multigraph: {regular_graph.multigraph}") try: my_graph = Graph() print(f"My graph is a multigraph: {my_graph.multigraph}") # 验证传参生效 my_multi_graph = Graph(multigraph=True) print(f"My multi graph is a multigraph: {my_multi_graph.multigraph}") except Exception as e: print(f"Error: {e}")
运行结果
The first graph is a multigraph: False My graph is a multigraph: False My multi graph is a multigraph: True
这样就能正常初始化子类实例,并且正确传递multigraph参数了。
内容的提问来源于stack exchange,提问作者Squircle
相关产品推荐
相关产品推荐

