【发布时间】:2012-01-24 11:58:58
【问题描述】:
抱歉标题混乱。
我想做以下事情:(类似于 Lisp 中的 defstruct)
def mkstruct(structname, field_dict):
# create a function called "structname" and get/set functions
# called "structname_get(s, field_name)" and "structname_set(s, field_name, value)"
# Create a struct "lstnode"
mkstruct("lstnode", {ndkey : 0, nxt: None})
# Make a new struct
node = lstnode()
node_set(node, "ndkey", 5)
v = node_get(node, "ndkey") # v should be 5
这可以在 C 中使用宏定义来完成。我不使用类的原因是因为我正在创建的“结构”将“绑定”到数据库(在这种情况下只是某种格式的文本文件)。而且我不想占用与对象相关的任何内存 - 我会将结构表示为一个数字(如果你愿意,可以是一个对象 ID)
【问题讨论】:
-
那么如果没有实际内存,你希望这些 getter 和 setter 做什么?
-
你能更具体地谈谈你对上课的厌恶吗?如果你把你的函数放在字典里,你基本上只是重新发明了这个类。听起来这就是它的发展方向。
-
我有一个巨大的树形结构。如果我可以不使用 OID 而不是对象,那么我就不会使用任何对象引用。每个对象访问都被转换为数据库操作(查找和更新)。
-
您是否发现对象引用在某些方面不好?如果使用对象而不是松散的函数种类增加的内存开销很大,您可能需要重新考虑使用 Python 的决定。