作者xinu (xinu)
看板Python
标题[问题] Class的offset
时间Sun Aug 3 01:50:05 2008
请问一下在python里
有办法藉由class里的某个member(attribute)
就找到该Class吗?
假设c里面是这样写的话
struct A {
....
....
int a; //certain member
};
struct A a;
void *ptr = &a.a;
ptr= ptr - ((struct A *)0)->a;
ptr这时候会等於 &a;
这样子的暴力手段python有办法实作出来吗?
或是有什麽其他替代方案? 我看introspection里好像没提到这段...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.200.162
1F:推 yzugsr:没有 08/03 16:01
2F:→ xinu:thanks,所以python只能用指到struct指到头的方式罗? 08/03 17:07
3F:→ qrtt1:有什麽理由一定要那样写@@? 08/04 10:08
4F:推 ykjiang:就算是 C ,最好也不要这样写吧;既难看又不跨平台 08/04 13:25
5F:→ xinu:Linux里的list就是这样写的,没人说过Linux难看又不跨平台吧.. 08/04 19:46
6F:→ xinu:刚学Python,好奇在低阶语言里的东西Python有没有对应的技术.. 08/04 19:48
7F:推 ykjiang:我先收回不跨平台评语,但我真看不懂在写啥,确定没笔误? 08/04 23:20
8F:→ ykjiang:C 要 list 也没人会这样写吧... 08/04 23:21
9F:推 ibmibmibm:C在stddef.h有offsetof的macro 08/05 01:15
10F:推 qrtt1:python 就有 list 了, 需要自己搞一个吗@@? 08/05 08:29
11F:推 ykjiang:offsetof 会写在 stddef.h 就是因为各平台的写法不同 08/05 12:16
12F:→ yjc1:在C中这技巧很常见,尤其在 embedded 平台. 可以大幅简化程式 08/05 23:15
13F:→ yjc1:btw,python与C的哲学不同,用到这种设计通常表示出了问题, 08/05 23:18
14F:→ yjc1:一定有更好的设计或方法取代 08/05 23:19
15F:推 ykjiang:这行明显有误,怎没人提 ptr= ptr - ((struct A *)0)->a; 08/05 23:50
16F:→ ykjiang:有 offsetof 用,就乖乖用比较不会出错,也可避掉平台问题 08/05 23:52
17F:→ xinu:我想不用stddef.h的原因是因为Linux Kernel不用C lib的定义 08/06 23:04
18F:→ xinu:应该是ptr-(void *)..原list.h写的没那麽粗糙 08/06 23:12
19F:→ xinu:刚好看到Linux里的这段觉得很有趣, 想用刚学的Python作作看 08/06 23:16
20F:→ xinu:他这样写的好处应该是不需要Object之类的东西把大家串起来 08/06 23:18
21F:推 ykjiang:刚稍微看了这个 list.h ,果然是个精致的设计; 08/08 00:31
22F:→ ykjiang:代码高度可重用,空间效率也比经典的 C++ template 版本好 08/08 00:36
23F:→ ykjiang:不过这种用法在 Python 乃至 JAVA 上,都没多大意义 08/08 00:38
24F:→ ykjiang:因这类语言原本就可只写一套「演算法」来操作「各类资料」 08/08 00:47
25F:→ ykjiang:,且不会有 C/C++ macro 或 template 展开後变痴肥的问题 08/08 01:17