Object Python:使用for循环从对象列表中提取引用
所以我对python还不太熟悉,所以请友善一点。 我试图创建一个全局排序的对象目录,作为所有程序的基础,作为跟踪程序中所有已创建对象实例的方法 所以 我创建了一个类,它包含一个对象引用列表(不是id)。 例如: 但是,一旦将对象添加到列表中,并且我运行get脚本,它就不会返回我的对象。我甚至使用directory.objDir[x]进行验证。(这总是引用我的对象) 我没有做什么,或者做错了什么 谢谢 结果: setDirectory() 正在启动对象目录。 全局目录引用集 测试=obj(“测试”) 启动:测试 重复支票 日志记录:test1 对象计数:2 t1=directory.getObj(“test1”) 正在搜索目录:test1 搜索失败 打印(directory.objDir) [,]Object Python:使用for循环从对象列表中提取引用,object,python-3.x,reference,Object,Python 3.x,Reference,所以我对python还不太熟悉,所以请友善一点。 我试图创建一个全局排序的对象目录,作为所有程序的基础,作为跟踪程序中所有已创建对象实例的方法 所以 我创建了一个类,它包含一个对象引用列表(不是id)。 例如: 但是,一旦将对象添加到列表中,并且我运行get脚本,它就不会返回我的对象。我甚至使用directory.objDir[x]进行验证。(这总是引用我的对象) 我没有做什么,或者做错了什么 谢谢 结果: setDirectory() 正在启动对象目录。 全局目录引用集 测试=obj(“测试”
我不太明白您打算如何使用此对象,但是我发现
\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