2009-10-20 575 views
7

例子:Python:获取实例化类的名字?

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的名字。这甚至有可能吗?谢谢。

+1

'x'是一个局部变量,你如何“得到”它? – SilentGhost 2009-10-20 10:14:22

+1

在你的例子中'x'是一个局部变量,只有当'meow'创建时才暂时存在。而'x' **是'Class2'的一个实例。你在问什么?请修正您的问题,使其有意义。 – 2009-10-20 10:21:28

+0

这只是一个简单的例子,用来描述是否有我想要做的功能;没有使用实际的代码。我能够使用回调来检索实例。但是,这并不是真的与这个问题有关。 – Chuck 2009-10-20 10:28:18

回答

5

除非将'creator'的实例传递给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 

这为您

+0

是的,我有这样的感觉,要么是设置属性。谢谢,这是我正在寻找的答案。 – Chuck 2009-10-20 10:29:25

+0

@Chuck:好的,他*是*设置属性,所以要么我不理解您的评论,要么您不明白答案:P – MestreLion 2012-04-26 09:11:21

1

在您的__init__()方法中,在有问题的类上设置一个变量,稍后再检索该方法。

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

0

你的问题的类之间的反向链接是非常相似的回答here。请注意,您可以确定谁在其构造函数中创建了实例,但之后没有。无论如何,最好的方法是将创建者明确地传递给构造函数。

+0

谢谢,这有帮助。是的,只是想知道我是否想以其他方式去做;除了以某种形式传递它。 – Chuck 2009-10-20 10:40:09