python - 获取实例变量的类

标签 python class variables

我尝试获取实例变量的类,我认为这很简单,但目前我无法弄清楚。

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_monthminutes_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/

相关文章:

python - Pandas 数据框 : get rows with same pair of values in two specific columns

java - 在构造期间访问基类字段

java - 调用构造函数时覆盖方法

string - SSIS:从字符串变量中过滤多个 GUID 作为数据流 OLE 源中的参数

python 常规如何将点与字母匹配?

python - tf.train.range_input_producer(epoch_size, shuffle=True) 不会终止也不会引起 CPU/GPU 负载

c# - 条件类属性?

Java接口(interface)作为引用类型?

python - 合并 __init__ 中的两个列表,无需实例化。 Python

python - nginx uwsgi 502 错误网关