【发布时间】:2016-08-18 04:23:20
【问题描述】:
从内省的角度来看,有没有一种方法可以在不创建实例的情况下获取类实例变量。创建实例时很容易:
class Super:
def __init__(self, name):
self.name = name
class Sub(Super):
pass
a = Super("Nice_Name")
print(a.__dict__.keys())
但我想在不创建实例的情况下获取该信息,只是为了反省。有办法吗?
【问题讨论】:
-
问题是类实例在被赋值之前根本没有任何属性;班级没有“宣布”他们。
__init__只是将值分配给在首次创建实例后动态创建的属性。本质上,您要求模拟__init__的执行。 -
更多,所以
__init__函数甚至可能不会创建一组确定性的属性。它可能取决于参数、全局状态,甚至是诸如setattr(self, str(random.random()), "derp")这样荒谬的东西 -
好的,但可以说我是否会尝试使用 Sub 类并且不为其分配任何值。它会给我错误。正如 Sub“知道”它需要“名称”。超级类也是如此。因此,这意味着以某种方式存在该信息。因此,如果子类知道在哪里查找实例变量。我不能那样做吗?我希望我不会在这里混合一些东西,因为我对 Python 还是很陌生。
-
@Vy.Iv:参数与实例变量无关。它们只是函数的参数。可以随心所欲地为所欲为。
标签: python oop instance introspection