Python 에서 구조체 쓰기

Python : 2008. 4. 21. 21:39
반응형
출처 : http://bbs.python.or.kr/viewtopic.php?t=23009&view=previous&sid=d4e69baa9665863c2a97f98de412f76e

C와 구조체를 공유해서 쓰고 싶으시면 struct 모듈을 쓰시면 됩니다.

코드:
>>> struct.pack('iibb', 1,2,3,4)
'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x04'
>>> struct.unpack('iibb', _)
(1, 2, 3, 4)


C와 공유할 필요는 없고 그냥 객체 안에 하위 속성을 두고 싶으신 경우에는
대부분의 경우에 dict를 쓰고, 일부 object를 쓰는 경우도 있습니다.

딕셔너리를 쓰는 예
코드:
>>> p = {}
>>> p['pxl'] = 5
>>> p['w'] = 120
>>> p['w']
120


object를 쓰는 예
코드:
>>> class Pixel(object):
...     __slots__ = ('pxl', 'w', 'h')
...
>>> p = Pixel()
>>> p.pxl = 5
>>> p.w = 120
>>> p.w
120


종종 object를 딕셔너리 겸용으로 쓰는 경우도 있습니다.

코드:
>>> class Pixel(dict):
...     def __getattr__(self, name):
...             if name.startswith('_'):
...                     return dict.__getattr__(self, name)
...             else:
...                     return self[name]
...     def __setattr__(self, name, value):
...             if name.startswith('_'):
...                     dict.__setattr__(self, name, value)
...             else:
...                     self[name] = value
...
>>> p = Pixel()
>>> p['w'] = 120
>>> p.w
120
>>> p.h = 240
>>> p['h']
240


그렇지만, 대부분의 경우에 object밑에 속성으로 두는 것은
실제로 쓰는데 상당히 불편한 점이 많이 발생하기 때문에
그다지 많이 쓰지 않고, 아주 특별한 요구사항이 있지 않는 한은
dict를 쓰는 것이 관례입니다.

그래도 언급하신 예제인 Pixel의 경우에는 점을 객체로 보면 상당히
추상적인 메쏘드를 많이 추가할 수 있는 경우가 되기 때문에, 객체로
만들어서 관련 메쏘드를 다 넣어버릴 수 있는 이점이 있을 것 같네요.

사전안에 사전으로 넣는것도 내생각에는 괜찬은거 같다.

반응형

'Python' 카테고리의 다른 글

Python 에서 goto 쓰기  (0) 2008.05.03
py2exe  (0) 2008.04.21
Python에서 엑셀 파일 열기  (0) 2008.04.04
Posted by Real_G