【问题标题】:How to enumerate all objects and get they attribute?如何枚举所有对象并获取它们的属性?
【发布时间】:2011-11-06 18:02:30
【问题描述】:

例如:

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

我们有返回对象数量的静态变量: 类名.counter

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

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

【问题讨论】:

  • 如何使用包含单个对象的列表/字典而不是静态变量名称obj1obj2 等。
  • obj[1-X] 这不是静态变量,它是 ClassName 类的对象

标签: python class object architecture


【解决方案1】:

嗯……其实不建议做这种类型的员工,有点看不懂,容易出bug……不过,你可以这样:

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)

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

【讨论】:

  • 当我将使用时如何从 names_list 中删除信息:del obj2?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2019-07-17
    • 2020-12-31
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多