【问题标题】:Python: Get name of instantiating class?Python:获取实例化类的名称?
【发布时间】:2009-10-20 10:11:42
【问题描述】:

例子:

class Class1:
    def __init__(self):
        self.x = Class2('Woo!')

class Class2:
    def __init__(self, word):
        print word

meow = Class1()

如何派生创建 self.x 实例的类名?换句话说,如果给我实例 self.x,我如何获得名称“Class1”?使用 self.x.__class__.__name__ 显然只会给你 Class2 名称。这甚至可能吗?谢谢。

【问题讨论】:

  • x 是一个局部变量,你是如何“获取”它的?
  • 在您的示例中,x 是一个局部变量,仅在创建 meow 时暂时存在。 x Class2 的一个实例。你在问什么?请修正您的问题,使其有意义。
  • -1:代码与问题无关。请发布与您的实际问题实际相关的实际代码。如果您不能发布与问题相关的代码,我们也无能为力,可以吗?
  • 让我明确一点,它是 x 和 self.x 无关紧要。以结构为例,这是一个关于能力的简单问题。它已被回答,其他人知道我指的是什么。是的,它应该是 self.x,是的,我在制作一个快速示例进行解释时打错了字。对我来说,你现在只是在分裂头发,但我会编辑这篇文章,因为这对你来说很重要。感谢您投反对票;真正的优雅
  • @Chuck:N00bs 阅读此网站寻求帮助。如果您的问题很清楚,那么他们将从您的问题中受益。如果您的问题不清楚,那么该网站就会很混乱,他们不会从您发布的内容中受益。选择——帮助他人——是你的选择。

标签: python class instance


【解决方案1】:

您不能,除非您将“创建者”的实例传递给 Class2() 构造函数。例如

class Class1(object):
    def __init__(self, *args, **kw):
        self.x = Class2("Woo!", self)

class Class2(object):
    def __init__(self, word, creator, *args, **kw):
        self._creator = creator
        print word

这会为您创建类之间的反向链接

【讨论】:

  • 是的,我感觉就是这种情况,或者设置属性。谢谢,这就是我一直在寻找的答案。
  • @Chuck:好吧,他正在设置一个属性,所以要么我不明白你的评论,要么你不明白答案:P
【解决方案2】:

在您的 __init__() 方法中为相关类设置一个变量,以便稍后检索。

如果你提出更好的问题,你会得到更好的答案。这个不太清楚。

【讨论】:

    【解决方案3】:

    您的问题与回答的here 非常相似。请注意,您可以确定谁在其构造函数中创建了该实例,但不能在之后确定。无论如何,最好的方法是显式地将创建者传递给构造函数。

    【讨论】:

    • 谢谢,有帮助。是的,我只是想知道我是否错过了其他任何方法;除了以某种形式传递它。
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2012-06-14
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多