在对象之间链接公共类属性的方法? (不是继承)

时间:2014-01-28 09:53:50

标签: python oop dictionary attributes

我有许多同一类的对象,每个对象持有不同的数据。

但是,它们有许多应该是“通用”的属性 - 即在所有对象中设置为相同的值。 (这可以是数值,对另一个对象的引用等)

有哪些不同的实现方法? 我想到的几种方法:

包含所有对象和公共属性作为单独的键/值对的字典。这里的问题是动态创建对象(从文件中读取可变数量的对象),因此创建密钥可能是个问题

'collection'类,其中公共属性在此集合类中定义,对象组作为列表传递

我不禁觉得那里可能有替代品,或者“更好”的方法(我知道这是主观的,但我想知道所有可能性......)

修改:

这是我的具体例子。

我有许多对象,每个对象定义一条河的分支(从现在开始称为Branches。因此,它们都有不同的x,y点属性。

它们应该全部“链接”到另一个对象,在这种情况下是描述域上高程的对象(从现在开始称为DEM

一种方法可以是“收集器”类(称为Network),它将所有Branches个对象组合在一起,并具有一个属性,该属性是对DEM的引用。

这样,我可以使用DEM在所有计算中安全地使用Branches。但是,它并不理想。我希望每个Branches对象都有一个返回每个点的高程的方法。为此,DEM需要传递到Branches方法(意味着我不能将该方法定义为属性,我想做)或者每个Branches内需要一个属性DEM 1}}指向DEM的对象。第二种方法存在允许在每个Branches对象中引用Branches的单独实例的风险,我不会允许这样做。让每个Branches对象保持对同一事物的单独引用似乎有点愚蠢(首选1个全局引用 - 这样我可以更改它而无需遍历每个{{1}}对象) 。

我发现这种事情全部出现 - 我有相同对象的实例,但我想保留它们之间的一些共同属性 - 所以更喜欢更一般的答案..

1 个答案:

答案 0 :(得分:3)

如果要拥有由类的所有实例共享和可访问的属性,请使用类属性:

class MyClass(object):

    myclassattr = 0 # class attribute

    def __init__(self, attr):
        self.myinstattr = attr # instance attribute
        if MyClass.myclassattr == 0:
            print("First!")
        MyClass.myclassattr += 1    

例如:

>>> a = MyClass()
First!
>>> b = MyClass()
>>> MyClass.myclassattr
2