如何解决Python:引用类属性
我希望我的类中的一个属性引用不同类中的一个属性。
这还不够好,因为它只引用了类,而不是成员:
class Foo
x: Bar
如果是 C++,我会使用带有非类型参数的泛型:
class Foo
x: AttrRef[Bar,"BarAttr"]
但是,AFAIU,python 不允许在泛型中使用非类型参数。
有哪些替代方法?
解决方法
让我先试着总结一下我是如何理解这个问题的。给定两个类
class Foo:
x: 'Bar' # y
class Bar:
y: Foo # x
你现在想要一个函数,它基本上做类似的事情
def check_relation(obj: Union[Foo,Bar],argname: str) -> bool:
attr = getattr(obj,argname)
if isinstance(obj,Foo):
return attr.y is obj
else:
return attr.x is obj
但是,您不想对 if-else
部分进行硬编码,而是希望它根据您通过类型提示或注释提供的数据自动工作。
据我所知,没有针对此类问题的干净或内置解决方案,据我所知,此类问题也不是 typing
模块的目标。
也就是说,您可能可以做一些骇人听闻的事情来让它工作。想到的是
-
inspect.getsource
,这将允许您分析类的源代码以查找注释 (# y
) -
typing.get_type_hints
。这将允许你做类似的事情y = TypeVar('y',bound='Bar') class Foo: x: y
然后使用
typing.get_type_hints(Foo)['x'].__name__
得到'y'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。