Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将classmethod的返回值赋给init变量_Python 3.x - Fatal编程技术网

Python 3.x 将classmethod的返回值赋给init变量

Python 3.x 将classmethod的返回值赋给init变量,python-3.x,Python 3.x,我试图将classmethod的返回值分配给init方法变量,但显示了错误“TypeError:无法解包非iterable非类型对象” 我尝试分配给一个变量,可以看到它返回“tuple” 类端口映射: ip_前缀=[] 定义初始化(self、节点1\u id、节点2\u id): self.node1\u id=node1\u id self.node2\u id=node2\u id self.node1\u ip,self.node2\u ip=port\u mappings.gen\u i

我试图将classmethod的返回值分配给init方法变量,但显示了错误“TypeError:无法解包非iterable非类型对象”

我尝试分配给一个变量,可以看到它返回“tuple”

类端口映射:
ip_前缀=[]
定义初始化(self、节点1\u id、节点2\u id):
self.node1\u id=node1\u id
self.node2\u id=node2\u id
self.node1\u ip,self.node2\u ip=port\u mappings.gen\u ip\u prefix()
@类方法
def gen_ip_前缀(cls):
如果len(cls.ip_前缀)==0:
cls.ip_前缀追加(“10.0.0.0/31”)
打印(cls.ip\U前缀)
返回“10.0.0.0/31”、“10.0.0.1/31”
其他:
通过
节点列表=端口映射(“95”、“96”)
因为它返回元组,所以我尝试下面的方法,但是

self.node1_ip,self.node2_ip= port_mappings.gen_ip_prefix()
它显示以下错误

TypeError:无法解压缩不可编辑的非类型对象


我认为问题在于调用
gen\u ip\u prefix()
方法时没有任何参数,因此您的if条件:
f len(cls.ip\u prefix)=0:
发现
cls
参数是
None
,然后在else条件下结束,函数只
传递
es而不返回值。这就是为什么会出现TypeError。

返回None的原因是您调用gen_ip_前缀两次

类内初始化后,self.node1\u ip,self.node2\u ip=port\u mappings.gen\u ip\u prefix()

然后在第二段代码中的另一次

第一次调用该函数时,它会将cls.ip_前缀视为[]。然后将10.0.0.0/31的条目放入其中,结果是[“10.0.0.0/31”]

这意味着第二次调用函数时,它会看到长度大于零,并转到else语句。由于else语句是函数的结尾(因此您实际上不需要该else),并且在该点上没有定义任何返回值,因此不会返回任何值


None不是iterable(不是元组、列表等),因此不包含可以在
a,b=function()
type语句中解压缩的多个值。

if
len(cls.ip\u前缀)!=0
,然后您的函数进入
else:pass
并返回
None
。嗨,primusa,我还有一些其他代码要放在else块中。首先,我需要从return methodThank Primusa中为这个实例变量赋值,第二次初始化时它碰到了else块。我现在用else块中的一些代码修复了它。谢谢你,Rob,如果你用一个初始化运行它,它会很好地工作。如果你为同一个类添加另一个实例,它会抛出错误node_list=port_mappings(“95”,“96”)print(node_list.\uu dict_u)k=port_mappings(“3”,“4”)print(k.\uu dict_u)实际上你是对的,这让人觉得我在测试代码时没有使用else块,这让我陷入了这个问题。我刚刚在else中添加了一些代码,它正在返回并分配这些值。谢谢你,Rob事实上你是对的,这让人觉得我在测试代码时没有使用else块,这让我陷入了这个问题。我刚刚在else中添加了一些代码,它正在返回并分配这些值。谢谢你,德丽埃