看板 Python 關於我們 聯絡資訊
請問一下在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
yzugsr:沒有 08/03 16:01
xinu:thanks,所以python只能用指到struct指到頭的方式囉? 08/03 17:07
qrtt1:有什麼理由一定要那樣寫@@? 08/04 10:08
ykjiang:就算是 C ,最好也不要這樣寫吧;既難看又不跨平台 08/04 13:25
xinu:Linux裡的list就是這樣寫的,沒人說過Linux難看又不跨平台吧.. 08/04 19:46
xinu:剛學Python,好奇在低階語言裡的東西Python有沒有對應的技術.. 08/04 19:48
ykjiang:我先收回不跨平台評語,但我真看不懂在寫啥,確定沒筆誤? 08/04 23:20
ykjiang:C 要 list 也沒人會這樣寫吧... 08/04 23:21
ibmibmibm:C在stddef.h有offsetof的macro 08/05 01:15
qrtt1:python 就有 list 了, 需要自己搞一個嗎@@? 08/05 08:29
ykjiang:offsetof 會寫在 stddef.h 就是因為各平台的寫法不同 08/05 12:16
yjc1:在C中這技巧很常見,尤其在 embedded 平台. 可以大幅簡化程式 08/05 23:15
yjc1:btw,python與C的哲學不同,用到這種設計通常表示出了問題, 08/05 23:18
yjc1:一定有更好的設計或方法取代 08/05 23:19
ykjiang:這行明顯有誤,怎沒人提 ptr= ptr - ((struct A *)0)->a; 08/05 23:50
ykjiang:有 offsetof 用,就乖乖用比較不會出錯,也可避掉平台問題 08/05 23:52
xinu:我想不用stddef.h的原因是因為Linux Kernel不用C lib的定義 08/06 23:04
xinu:應該是ptr-(void *)..原list.h寫的沒那麼粗糙 08/06 23:12
xinu:剛好看到Linux裡的這段覺得很有趣, 想用剛學的Python作作看 08/06 23:16
xinu:他這樣寫的好處應該是不需要Object之類的東西把大家串起來 08/06 23:18
ykjiang:剛稍微看了這個 list.h ,果然是個精緻的設計; 08/08 00:31
ykjiang:代碼高度可重用,空間效率也比經典的 C++ template 版本好 08/08 00:36
ykjiang:不過這種用法在 Python 乃至 JAVA 上,都沒多大意義 08/08 00:38
ykjiang:因這類語言原本就可只寫一套「演算法」來操作「各類資料」 08/08 00:47
ykjiang:,且不會有 C/C++ macro 或 template 展開後變癡肥的問題 08/08 01:17