没有行为的对象

don*_*pj2 7 python object-oriented-analysis

我正在考虑一种情况,我有一个对象"交易",它具有相当多的属性,如帐户,金额,日期,货币,类型等.

我从不计划改变这些数据点,计算逻辑将存在于其他类中.我的问题是,为了保存数据,实例化成千上万个对象的Python设计是否糟糕?我发现数据嵌入在类中更容易,而不是试图将其嵌入到某些数据结构组合中.

Fre*_*Foo 8

不,这完全没问题.事实上,Python在标准collections模块中支持它:

from collections import namedtuple

Transaction = namedtuple("Transaction", ["account", "amount"])
Run Code Online (Sandbox Code Playgroud)

而不是class Transaction(object):等等.请注意,这namedtuple是一种"类工厂",您需要将要构造的类的名称作为字符串传递给它.这不一定是你绑定结果的名称,但这样做仍然是一个好主意.命名元组类型类似于Pascal中的记录或C中的结构:具有命名成员但没有自己的重要行为的数据持有者.

用法:

>>> t = Transaction(account="my private account", amount=+1000)
>>> t
Transaction(account='my private account', amount=1000)
>>> t.amount
1000
>>> t.amount += 1
Traceback (most recent call last):
  File "<ipython-input-6-ae60188f2446>", line 1, in <module>
    t.amount += 1
AttributeError: can't set attribute
Run Code Online (Sandbox Code Playgroud)