[英]how to select an object from a list of objects by its attribute in python
[英]how to get the object from its attribute in python?
我想做这样的事情:
class B():
def __init__(self,c):
self.c=c
def getA(self):
#this is what I want
class A():
def __init__(self,d):
self.b = B(d)
a = A(d)
我想要的是当我表演时
a.b.getA()
我可以通过其属性 b 获取使用此方法的对象 a。 我无法将任何新变量传递给函数,因为在实现中这是一个由其他人编写的类,更改输入变量意味着更改很多东西。
任何人都可以帮忙吗?
既然您似乎在A
构造函数中构造了B
实例,那么给您的B
实例一个对A
实例的引用:
class B():
def __init__(self, c, a):
self.c = c
self.a = a
def getA(self):
return self.a
class A():
def __init__(self, d):
self.b = B(d, self)
a = A(d)
在某些Python 实现下,有时可以使用gc.get_referrers
找到一个实例,但正如文档所说,应该避免“出于调试以外的任何目的”使用它。 :
import gc
class B():
def __init__(self,c):
self.c = c
def getA(self):
for i in gc.get_referrers(self):
if not isinstance(i, dict):
continue
for j in gc.get_referrers(i):
if isinstance(j, A) and getattr(j, 'b', None) is self:
return j
return
class A():
def __init__(self,d):
self.b = B(d)
a = A(42)
print(a.b.getA() is a)
第一个get_referrers
调用将找到A
实例的__dict__
; 这可能是dict
类型; 然后我们遍历字典中所有引用self
的对象,如果这些对象中的任何一个是A
类型,并且它的属性b
的值为is self
,我们将返回该对象。
因此,子句print(abgetA() is a)
应打印为真。
但严重的是,不要使用此代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.