2011-08-30 92 views
0

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

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中做到这一点,但只有设计也会很好。

+0

如何使用其中的单个对象的列表/代词而不是静态变量名称obj1,obj2等 – eumiro

+0

obj [1-X]这不是静态变量,它是类的对象ClassName – alterpub

回答

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) 

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

+0

This是最好的变体,thx你! – alterpub

+0

如何从names_list中删除信息时,我将使用: del obj2? – alterpub

2

您可以使用Factory类,即处理创建和存储ClassName对象的对象。然后你可以很容易地访问Factory类中的不同ClassName s类(它必须是一个单例)