如何枚举所有对象并获取它们的属性?

时间:2011-08-30 11:57:25

标签: python class object architecture

例如:

obj1 = ClassName()
obj1.name = "name1"
obj2 = ClassName()
obj2.name = "name2"
obj3 = ClassName()
obj3.name = "name3"
obj4 = ClassName()
obj4.name = "name4"

我们有一个返回对象数的静态变量:     ClassName.counter

我如何获得obj1.name,obj2.name等,但是如果对象计数可以是动态的(例如使用循环)?

PS:如果你能说我在python中如何做到这一点会更好,但只有设计也会很好。

2 个答案:

答案 0 :(得分:2)

您可以使用Factory类,即一个处理ClassName对象创建和存储的对象。然后,您可以轻松访问ClassName类(必须是单例)中的数组中的不同Factory

答案 1 :(得分:1)

嗯......实际上不建议做这种类型的工作人员,有点难以理解并容易出错...但是,你可以这样做:

class MyClass(object):
    names_list = []
    _name = None

    def get_name(self):
        return self._name
    def set_name(self, name):
        assert self._name is None
        self._name = name
        self.names_list.append(name)
    name = property(get_name, set_name)

obj1 = MyClass()
obj1.name = 'name1'

obj2 = MyClass()
obj2.name = 'name2'

print obj1.names_list
print len(obj1.names_list)

有效。它很丑。使用一些外部工厂来处理它可能要好得多。如果你想存储到现有实例的链接,一些带弱映射的数组/字典可能是一个很好的解决方案。