2020. 9. 28. 16:00ㆍDiary/1~100
----------------------------------------------
PY3 = sys.version_info.major == 3
# PY3은 파이썬 3.xx 버전을 뜻한다.
sys.version : 현재 파이썬 인터프리터의 사람이 읽을 수 있는 버전정보가 포함 된 문자열을 반환한다. 그러나 '주 릴리스 번호' 및 '마이크로 릴리스 번호'와 같은 정보는 코드에서 추가로 사용하기 위해서 추가 처리가 필요하다.
sys.version_info : 버전 정보를 명명 된 튜플로 반환하여 이 문제를 쉽게 해결한다.
- 반환되는 버전 데이터 -
majar : 주요 출시 번호
micro : 패치 릴리스 번호
minor : 부 릴리스 번호
releaselevel : '알파' , '베타' , '후보자' 또는 '릴리스
serial : 일련 번호
----------------------------------------------
if PY3:
basestring = str
# 만약 파이썬 버전이 3.xx라면, basestring은 str 클래스이다.
basestring : 이 추상 유형은 str및 유니코드의 수퍼 클래스다. 호출하거나 인스턴스화 할 수 없지만 객체가 str또는 유니코드의 인스턴스인지 여부를 테스트하는 데 사용할 수 있다.
예시) isinstance(obj, basestring)isinstance(obj, (str, unicode))
str : String은 글자의 Unicode 코드로 이루어진 불변한 순서있는 집합입니다.
----------------------------------------------
def is_storage(item):
return hasattr(item, '__iter__') and hasattr(item, '__getitem__')
# hasattr (obj : Any, 이름 : str) -> bool
객체에 주어진 이름의 속성이 있는지 여부를 반환한다. 이는 getattr (obj, name)을 호출하고 AttributeError를 포착하여 수행된다.
# bool (int). bool은 논리형이며 True, False(참, 거짓)을 판별한다. bool (x)-> bool 인수 x가 참이면 True를 반환하고 그렇지 않으면 False를 반환합니다. 내장 True와 False는 bool 클래스의 유일한 두 인스턴스이다. bool 클래스는 int 클래스의 하위 클래스이며 하위 클래스가 될 수 없다.
# __iter__ : 반복자를 반환한다. __iter__() 메서드를 사용하여 이터레이터(iterator)를 쓸 수 있도록 설정한다. 이터레이터란, 값을 한 개씩 순서대로 꺼낼 수 있는 구조를 갖춘 오브젝트 사용자가 정의한 클래스가 이터레이터를 지원하려면 __iter__() 메쏘드를 정의하면 된다. iter()는 객체의 __iter__() 메쏘드가 돌려주는 값을 이터레이터로 사용한다. next()에 이터레이터를 전달하면 이터레이터의 __next__() 메쏘드를 호출한다. 때문에 최소한의 이터레이터는 이렇게 구성할 수 있다.
# __getitem__ : 특정 object에 [] 연산자를 사용하면 내부적으론 __getitem__이라는 메소드가 실행된다. 예를 들어서 arr[1] 이라고 했다면 arr.__getitem__(1) 과 같이 변경되는 것이다.
# 즉, is_storage(item) 함수는 hasattr 객체에 '__iter__'와 '__getitem__' 속성이 있는지 참, 거짓을 판별하고 반환한다.
----------------------------------------------
def is_stream(item):
return hasattr(item, 'open') and callable(item.open)
# callable(item.open) : callable(object)은 전달받은 object 인자가 호출 가능한지 여부를 판단한다. __builtin__ module에 포함된 function 이다.
# argument : object - 호출 가능 여부를 판단할 object 인자 하나를 넘겨준다.
# return value : 인자로 전달받은 object가 호출 가능한 object일 경우 True, 아닐 경우 False를 반환한다.
# 즉, is_stream(item)함수는 hasattr 객체에 'open' 속성이 있는지 참, 거짓을 판별하고
item.open을 호출할 수 있는지 확인한다.
----------------------------------------------
class ItemWrapper(object):
def __init__(self, wrapped):
self.wrapped = wrapped
def __getattr__(self, name):
return getattr(self.wrapped, name)
# object : builtins 클래스 객체이다. 클래스 계층 구조의 기본 클래스이다. 호출되면 인수를받지 않고 인스턴스 속성이 없고 어떤 것도 제공 할 수없는 새로운 기능없는 인스턴스를 반환한다.
# __init__ : init(생성자)는 초기화(initialize) 메서드. __init__을 사용하면 클래스명을 쓰고 옆에 바로 인자들을 채워 넣음으로써 그 값들을 지닌 객체를 만들어 낼 수 있다. 파이썬에서는 클래스에서 사용하는 함수의 첫번째 인자(parameter)를 self로 사용하는 것이 원칙입니다.
# __getattr__ : __getattr__는 인스턴스에 해당 attribute가 없을경우 호출된다. 즉, 다 찾아봐도 없으면 __getattr__를 호출하게 된다.(인풋인자로 해당 attribute를 넘겨주면서) 쉽게말해 제일 “후순위”로 호출되는 녀석이라 볼 수 있다.
# getattr : getattr(object, name[, default]) = object에 존재하는 속성의 값을 가져온다.
# __getattribute__ : (해당 속성이 있든 없든) 가장 “선순위”로 호출된다.
__getattr__ : (해당 속성를 찾을 수 없을경우) 가장 “후순위”로 호출된다고 이해할 수 있다.
# ItemWrapper(object)라는 class(붕어빵틀)을 만든다. 그 class에는 __init__ 함수와 __getattr__ 함수가 있다. 사용자는 __init__(생성자)를 이용해서 wrapped 인자를 넣어서 인스턴스(붕어빵)을 찍어낸다. __getattr__라는 함수도 있는데 이는 self.wrapped 오브젝트의 name의 값을 받아오는 것이다.
# 즉, ItemWrapper(object)는 self.wrapped 의 name 값을 가져오는 클래스다.
----------------------------------------------
# 인스턴스란 클래스에 의해 만들어진 객체를 칭하는 말이다. 예를 들어 클래스를 붕어빵 틀이라고 한다면, 인스턴스는 붕어빵이 되는 것이다. 즉, 클래스는 인스턴스를 만드는 하나의 틀입니다. 앞으로 클래스를 이용하여 인스턴스를 계속적으로 만들어 낼 수 있다.
class 클래스이름(기반클래스이름)
----------------------------------------------
class StorageWrapper(ItemWrapper):
def __iter__(self):
return iter(self.wrapped)
def __getitem__(self, name):
return self.wrapped[name]
# StorageWrapper는 ItemWrapper클래스를 기반으로 가지는 클래스이다.
# self.wrapped의 값을 1개씩 꺼내온다.
# self.wrapped[name]의 속성 값을 가져오는데, 속성을 찾을 수 없을 경우 가장 후순위로 호출한다.
'Diary > 1~100' 카테고리의 다른 글
31일차 파이썬 백신개발 -6 (0) | 2020.09.30 |
---|---|
30일차 파이썬 백신개발 -5 (0) | 2020.09.29 |
28일차 파이썬 백신개발 -3 (0) | 2020.09.27 |
27일차 Code Up 문제풀이 (0) | 2020.09.26 |
26일차 Code Up 문제풀이 (0) | 2020.09.25 |