์ด๋ ค์ด ๊ฒ๋ค์ ๊ฑฐ์ ๋ฐฐ์ด ๊ฒ ๊ฐ์ผ๋ ์ ์ฒด์ ์ธ ๋ณต์ต์ ํ๋ ๋ง์์ผ๋ก ๊ฐ๋ณ๊ฒ ๋ค์๋ค.
descriptor
low level์์
__get__,__set__
์ผ๋ก ์์ฝ์ด ๋์ด์๋ ์์ ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์์ ์ ์ถ๊ฐํ ์ ์๋ค.
- ์ํฉ์ ๋ง๋ ๋ฉ์๋ ๊ตฌํ์ ํตํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
- Property์ ๋ฌ๋ฆฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ( ; ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ฑ๊ฐ์ผ๋ก )
- ORM framework์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
property
๋น๊ต์ high level์์ ๋์ํ๋ฉฐ, annotation์ ๋ฌ์์ ๋ณธ์ฐ์ getter,setter ์ญํ ์ ํ ์์๊ฒ ํด์ค๋ค.
ํ์ฌ directory์ ํด๋, ํ์ผ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด์
non-data descriptor
์ด๋ค.import logging
import os
class DirectoryFileCount:
def __get__(self, obj, objtype=None):
return len(os.listdir(obj.dirname))
# DirectoryPath๋ก ๊ฒฝ๋ก๋ฅผ ๋ฐ์์ directoryFileCount๊ฐ ๊ฐ์๋ฅผ ๋ฐํํ ๊ฒ์ด๋ค.
class DirectoryPath:
# descriptor instance
size = DirectoryFileCount()
def __init__(self, dirname):
self.dirname = dirname
โญ๏ธ DirectoryPath๊ฐ size๋ผ๋ ์์ฑ์ผ๋ก DirectoryFileCount๋ฅผ Descriptor๋ก ๊ฐ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค!
# ํ์ฌ ๊ฒฝ๋ก
s = DirectoryPath('./')
print(s.size)
# ---------------ํท๊ฐ๋ฆด ๋ ์ถ๋ ฅ ์ฉ๋
print('ex 1>', dir(DirectoryPath))
# [... , 'size']
print('ex 1>', DirectoryPath.__dict__)
# 'size': <__main__.DirectoryFileCount object at 0x7f8de31c8fa0>,
# size ๋ณ์์ directoryFileCount ๋ฉ์๋๊ฐ ์ฐธ์กฐ๋์ด ์๋ค~
print('ex 1>', dir(s))
# [... , 'size']
print('ex 1>', s.__dict__)
# ex 1> {'dirname': './'}
[์ถ์ฒ]