我有许多同一类的对象,每个对象持有不同的数据。
但是,它们有许多应该是“通用”的属性 - 即在所有对象中设置为相同的值。 (这可以是数值,对另一个对象的引用等)
有哪些不同的实现方法? 我想到的几种方法:
包含所有对象和公共属性作为单独的键/值对的字典。这里的问题是动态创建对象(从文件中读取可变数量的对象),因此创建密钥可能是个问题
'collection'类,其中公共属性在此集合类中定义,对象组作为列表传递
我不禁觉得那里可能有替代品,或者“更好”的方法(我知道这是主观的,但我想知道所有可能性......)
修改:
这是我的具体例子。
我有许多对象,每个对象定义一条河的分支(从现在开始称为Branches
。因此,它们都有不同的x,y点属性。
它们应该全部“链接”到另一个对象,在这种情况下是描述域上高程的对象(从现在开始称为DEM
)
一种方法可以是“收集器”类(称为Network
),它将所有Branches
个对象组合在一起,并具有一个属性,该属性是对DEM的引用。
这样,我可以使用DEM
在所有计算中安全地使用Branches
。但是,它并不理想。我希望每个Branches
对象都有一个返回每个点的高程的方法。为此,DEM
需要传递到Branches
方法(意味着我不能将该方法定义为属性,我想做)或者每个Branches
内需要一个属性DEM
1}}指向DEM
的对象。第二种方法存在允许在每个Branches
对象中引用Branches
的单独实例的风险,我不会允许这样做。让每个Branches
对象保持对同一事物的单独引用似乎有点愚蠢(首选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