Python 将类的实例传递给类
我希望能够将Python 将类的实例传递给类,python,class,Python,Class,我希望能够将Foo的一个实例传递给Foo的另一个实例 我下面的代码不工作有两个原因: 在知道Foo之前,我需要在MyTypes中使用Foo。我得到了一个名称错误,Foo是未知的 在我的检查中,isinstance(values,Foo)我的Foo实例未被识别,我得到了我的TypeError“Type not supported” 有人能解释一下我该如何解决这个问题吗 谢谢 MyTypes = (list,np.ndarray, Foo) class Foo(): def __init_
Foo
的一个实例传递给Foo
的另一个实例
我下面的代码不工作有两个原因:
Foo
之前,我需要在MyTypes
中使用Foo
。我得到了一个名称错误,Foo是未知的isinstance(values,Foo)
我的Foo
实例未被识别,我得到了我的TypeError“Type not supported”MyTypes = (list,np.ndarray, Foo)
class Foo():
def __init__(self,values:MyTypes) -> None:
self.values = self._unpack_values(values)
def _unpack_values(self,values):
if not isinstance(values,MyTypes):
raise TypeError("Type not supported")
else:
if isinstance(values, list):
return "list"
elif isinstance(values, Foo):
return "Foo"
elif isinstance(values, np.ndarray):
return "np.ndarray"
else:
return ValueError("Something went wrong")
f = Foo(values=Foo(values=[1,2,3]))
MyTypes
仅用作对\uuuu init\uuuu
的注释,因为在创建Foo
引用之前,您不能使用它,我建议您忘记注释,只需将MyTypes
全部删除即可
# MyTypes = (list,np.ndarray, Foo)
# I would remove this
class Foo:
def __init__(self,values) -> None:
self.values = self._unpack_values(values)
def _unpack_values(self,values):
# only start referencing Foo from here as a validation
if not isinstance(values, (list, ndarray, Foo)):
raise TypeError("Type not supported")
else:
if isinstance(values, list):
return "list"
elif isinstance(values, Foo):
return "Foo"
elif isinstance(values, np.ndarray):
return "np.ndarray"
else:
return ValueError("Something went wrong")
f = Foo(values=Foo(values=[1,2,3]))
挑战在于,在使用方法之前,您不能在
类Foo
之前或在其主体内引用Foo。我看不出使用MyTypes有多大好处,所以这是最简单的修复方法。一个难看的方法就是创建一个shell类,然后从函数中添加方法:
import numpy as np
class Foo():
pass
MyTypes = (list,np.ndarray, Foo)
def __init__(self,values:MyTypes) -> None:
self.values = self._unpack_values(values)
def _unpack_values(self,values):
if not isinstance(values,MyTypes):
raise TypeError("Type not supported")
else:
if isinstance(values, list):
return "list"
elif isinstance(values, Foo):
return "Foo"
elif isinstance(values, np.ndarray):
return "np.ndarray"
else:
return ValueError("Something went wrong")
Foo.__init__ = __init__
Foo._unpack_values = _unpack_values
f = Foo(values=Foo(values=[1,2,3]))
这是否回答了您的问题?谢谢没有使用MyTypes,而是解决了这个问题。这就解释了为什么我从未遇到过这个问题,因为我刚刚开始使用注释。谢谢但是,按照链接中的建议使用来自未来导入注释的,并不能解决问题。