我尝试获取实例变量的类,我认为这很简单,但目前我无法弄清楚。
class A():
def __init__(self):
self.a = 1
class B():
def __init__(self):
self.b = A()
def getClassOfVariable(abc):
print(abc)
getClassOfVariable(B().b)
<__main__.A object at 0x7f4b2652ac18>
例如,我有一个函数,我将 B().b 作为参数(为什么)传递给函数,在这个函数中我需要变量的类在哪里定义,所以类 B() 就是我想要的在函数中。 我所知道的只是在函数 getClassOfVariable 中我只得到像 B 这样的类。
感谢您的帮助! :)
最佳答案
你不能这么做。
在 Python 中,变量只是值的名称。一个值可以有多个名称,例如 60
可能被称为 seconds_per_month
、minutes_per_hour
,甚至是 speed_limit_mph
,并且这些名字显然彼此无关。值也可以根本没有名称,例如 print(60)
不会为 60
提供任何名称。
要记住的重要一点是,当您调用函数时,您的参数是 passed by assignment 。也就是说,函数的参数将成为您传入的值的新名称。因此,被调用的函数不知道您对传递的对象使用什么名称,它只知道该对象自己的名称.
在这种情况下,对象本身不知道它是在哪个类中创建的。您知道它,因为您知道对象的名称(它是 B().b
)。但对象的名称不会传递给被调用的函数,因此 getClassOfVariable
无法确定您的 A
对象是在哪个类中创建的。
那么,如何解决这个限制呢?最简单的途径是通过传递 type(self)
(或 self.__class__
,例如Python 2.x 经典类)作为 A()
的参数并在 A.__init__()
方法中处理它,如下所示:
class A():
def __init__(self, owner=None):
self.a = 1
self.owner = owner
class B():
def __init__(self):
self.b = A(type(self))
然后您可以检查 B().b.owner
属性来找出哪个类创建了您的 A
对象。但是,如果您创建 B
的子类,则 type(self)
将是该子类,而不是 B
。如果在这种情况下您仍然需要获取 B
,那么您应该传递 B
而不是 type(self)
。
关于python - 获取实例变量的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47620179/