Reference Fluent Python Stackoverflow docs.Python.org type() 필자가 이때까지 알았던 type함수는 인수를 하나만 받고 해당 객체가 어떤 타입인지(object.__class__) 알려주는 함수로써만 동작하는지 알았다. x = 1 print(type(x)) >>> 하지만 type함수가 세 개의 인수(name, bases, dict)를 받으면 클래스를 동적으로 생성하는 클래스 팩토리처럼 동작하게 된다. ※ 인수가 세개인 경우 type의 매개변수 ★ name: 생성할 객체(클래스)의 이름 --> class.__name__ ★ ★ bases(튜플): 생성할 객체(클래스)가 상속받을 클래스 --> class.__bases__ ★ ★ dict(딕셔너리): 생성할 객체(..
Reference Fluent Python GeeksforGeeks Descriptor HowTo Guide(Raymond Hettinger) Stackoverflow 디스크립터(descriptor) - [1]편에 이어서 작성한다. https://tcitr-antoliny.tistory.com/16 [파이썬]디스크립터(descriptor) - [1] Reference Fluent Python geeksforgeeks Descriptor HowTo Guide(Raymond Hettinger) Stackoverflow 디스크립터는 독립적인 하나의 클래스가 있다면 해당 클래스의 특정 속성을 다른 클래스(디스크립터)가 관리할.. tcitr-antoliny.tistory.com [1]편에는 디스크립터에 대한 기본..
Reference Fluent Python geeksforgeeks Descriptor HowTo Guide(Raymond Hettinger) Stackoverflow 디스크립터는 독립적인 하나의 클래스가 있다면 해당 클래스의 특정 속성을 다른 클래스(디스크립터)가 관리할 수 있게 한다. 사실 말로만 보면 무슨 소리인지 모르겠지만 코드를 보면서 알아가는 게 더 낫다. 디스크립터(descriptor) class Student: def __init__(self, name, age, major): self.name = name self.age = age self.major = major antoliny = Student('Antoliny', 23, 'Computer Science') 굉장히 간단한 Studen..
Reference Fluent Python Python CookBook yield from을 통해 서브루틴 만들기 파이썬 3.4부터 yield from이라는 새로운 키워드가 추가되었다. def gen(): for c in 'AB': yield c for i in range(1, 3): yield i print(list(gen())) >>> ['A', 'B', 1, 2] 보통 제너레이터 함수 내에서 또 다른 루틴이 있을 때 for문을 사용함으로써 해당 루틴을 표현하면 되지만 def gen(): yield from 'AB' yield from range(1, 3) print(list(gen())) >>> ['A', 'B', 1, 2] yield from구문을 사용하면 더 깔끔하게 해결할 수 있다. yield..
Reference Fluent Python 함수 안에 yield키워드가 있다면 그 함수는 제너레이터 함수다. def generator(): print('My Favorite Food is') yield 'Chicken' print('My Hobby is') yield 'Watching England Premier League' generator() 함수를 호출하면 제너레이터 객체를 생성하고 호출자가 제너레이터 객체의 흐름을 제어할 수 있다. 호출자가 next()함수를 호출하면 제너레이터 객체는 값을 '생산'하고 그 값을 호출자에게 전달한다. (★호출자가 제너레이터객체로부터 값을 꺼내오는 형식★) 그리고 다음 yield구문까지 함수를 진행하며 다음 yield구문에 도착했을때 호출자의 next() 함수를 ..
Reference Fluent Python neillmorgan.wordpress.com ※참고로 클로저를 모른다면 데코레이터에 대해 이해하기 어렵다. 소개팅 def blind_date(name): print(f"Hello My Name is {name}!") 필자는 안타깝게도 실제로 소개팅을 한 번도 해본 적은 없지만 만약 소개팅을 하게 된다면 먼저 자신의 이름을 상대방에게 말해줄 것이다. 근데 생각해보니 만나자마자 나의 이름을 말하는 것보단 악수를 먼저 하는게 좋다고 생각했다. 그래서 함수를 조금 수정해서 def blind_date(name): print("handshake") print(f"Hello My Name is {name}!") 악수를 먼저 하고 나의 이름을 말하는 구조로 코딩했다. 근데 ..