2012-11-19 34 views
2

获取对象的名称并在创建时将其存储为对象是否可能?即如果我要创建一个新类..在实例化过程中获取对象名称

Class foobar(): 
    pass 

然后说...

fooinstance = foobar() 

是否有存储类型Foobar的创建的对象的名称“fooinstance”的方法吗?可以使用名称来实现这种行为吗?

我问的原因是,创建的对象将创建额外的对象,他们需要知道他们是由谁创建的。

+0

没有“谁”,只有引用。 – Keith

+0

在实例化过程中,实例化对象B的对象A的引用如何传递给对象B? – Flaminator

+0

你为什么要这么做?听起来你想要得到循环引用和内存泄漏。最终目标是什么? – Keith

回答

2

你想要做这样的事情吗?

class Player(object):  
    # ... snip ... 

    def fire(self): 
     bullet = Bullet() 
     bullet.owner = self 
     bullet_list.append(bullet) 

我已经使用类似的东西,当你需要知道父母或所有者。如果所有者可能不存在,则可以使用weakref。

2

不,没有意义。

fooinstance = foobar() 
bar = fooinstance 
print bar.__name__ 

找到识别您的对象的另一种方法,也许用初始化程序中的一个键设置。

+0

为了阐明意图,我编辑了我的问题。 fooinstance将创建需要知道他们是由谁创建的对象。我宁愿不必在赋值时拥有一次,并且再次定义键值,因为我认为这会降低可读性。有没有不同的方式来做到这一点? – Flaminator

1

如果你需要知道“谁”创造了一个对象,那么就传递“谁”在创建时间:

class Foo(): 
    def __init__(self,whichbar): 
    do something with whichbar 

class Bar(): 
    def something(self): 
    myfoo = Foo(self) 

注意,名变量一个对象被分配到是不重要的 - 该名称随着对象在例程之间传递而改变。这是你关心的实际情况。

+0

谢谢,这回答了这个问题。我已经给了猴子这张支票,但是根据谁先回答。 – Flaminator