Object Python:使用for循环从对象列表中提取引用

Object Python:使用for循环从对象列表中提取引用,object,python-3.x,reference,Object,Python 3.x,Reference,所以我对python还不太熟悉,所以请友善一点。 我试图创建一个全局排序的对象目录,作为所有程序的基础,作为跟踪程序中所有已创建对象实例的方法 所以 我创建了一个类,它包含一个对象引用列表(不是id)。 例如: 但是,一旦将对象添加到列表中,并且我运行get脚本,它就不会返回我的对象。我甚至使用directory.objDir[x]进行验证。(这总是引用我的对象) 我没有做什么,或者做错了什么 谢谢 结果: setDirectory() 正在启动对象目录。 全局目录引用集 测试=obj(“测试”

所以我对python还不太熟悉,所以请友善一点。 我试图创建一个全局排序的对象目录,作为所有程序的基础,作为跟踪程序中所有已创建对象实例的方法

所以

我创建了一个类,它包含一个对象引用列表(不是id)。 例如:

但是,一旦将对象添加到列表中,并且我运行get脚本,它就不会返回我的对象。我甚至使用directory.objDir[x]进行验证。(这总是引用我的对象)

我没有做什么,或者做错了什么

谢谢

结果:

setDirectory() 正在启动对象目录。 全局目录引用集 测试=obj(“测试”) 启动:测试 重复支票 日志记录:test1 对象计数:2 t1=directory.getObj(“test1”) 正在搜索目录:test1 搜索失败 打印(directory.objDir) [,]


我不太明白您打算如何使用此对象,但是我发现
\uuuu init\uuu
方法存在一些问题。
首先,我想你的对象应该是a,但它不是。您可以在此处定义类属性:

class objDirectory:
    name = ""
    count = 0
    objDir = []
但是在
\uuuu init\uuuu
方法中,您总是覆盖它们,而不是添加到它们中。这意味着每次编写类似
a=objDirectory()
,该实例的
count
将设置为1。另外,请注意(至少在python2.7中),您需要一个
@classmethod
修饰符,用于您希望能够修改类属性(相对于实例的属性)的每个函数。像这样:

class objDirectory:
    count=0

    @classmethod
    def add_object(cls):
        cls.count+=1
    def __init__(self):
        self.add_object()
这也适用于
objDir

其次,在
\uuuu init\uuuu
方法中,有一个名为
name
的变量,该变量从未使用过。也许你的意思是
self.name

有更好的方法来实现单例,但是,如果您是python新手,这里有一个简单的示例可能更容易理解:

class mySingleton(object):
    singletonObject = None
    def __new__(cls):
        if not cls.singletonObject:
            cls.singletonObject = super(mySingleton, cls).__new__(cls)
        return cls.singletonObject

\uuuuu new\uuuu
方法是创建实际实例的静态方法。返回值是创建的新实例。这样重写它将使我在每次调用
mySingleton()
时得到相同的实例;
mySingleton()就是mySingleton()
这句话永远都是真的。

非常感谢你,我需要了解一下你在这里的一些东西,但我还有很多东西要学。
class mySingleton(object):
    singletonObject = None
    def __new__(cls):
        if not cls.singletonObject:
            cls.singletonObject = super(mySingleton, cls).__new__(cls)
        return cls.singletonObject