콘텐츠로 건너뛰기
Home » python » Page 20

python

네이버 블로그 xml-rpc 클라이언트 만들기 – 3

조금 더 깔끔하게 정리한 MetaWebLog API의 전체 소스. struct 형태로 내려받는 반환값은 포스트와 관계된 내용과 카테고리와 관련된 것들인데, 카테고리는 사실 상 카테고리 제목만 가지고 있으면 되고, 포스트와 관련한 내용은 포스트 클래스로 바로 변환하여 사용할 수 있게 했다. 또한 최종적으로 불러왔거나 발행한 포스트는 내부적으로 그 ID를 기억하여 사용이 쉽도록 했다. 이전 글에서도 잠깐 소개했지만, Post 클래스에서 팩토리 메소드를 구현하기 위해 @staticmethod 데코레이터를 활용. (까먹을까봐 계속 써 둠) 사용법은 간단하다. 네이버를 기준으로 설명하면 위 파일을 임포트해서 Weblog의 객체를 생성한다. 생성시 파라미터에는 네이버아이디,… 더 보기 »네이버 블로그 xml-rpc 클라이언트 만들기 – 3

[Python] 파이썬의 클래스 메소드, @staticmethod

파이썬의 데코레이터(decorator)문법은 흔히 찾아보기 힘든 문법인데 (거의 프레임워크들에서나 볼 수 있음) 클래스를 만들다보면 요긴하게 쓰이는 부분이 있다. (혹은 책 같은데서 찾아보게 될지도…) class Post: def __init__(self): pass @staticmethod def postFromStructs(structs): if type(structs) == list: result = [] for elem in structs: a = Post() for key in a.keys: setattr(a, key, elem[key]) result.append(a) if len(result) > 1: return result else: return result[0] else: result = Post() for key in structs: setattr(result, key, structs[key]) return result 위 코드에서 @staticmethod라는 데코레이터를 사용했는데, staticmethod는… 더 보기 »[Python] 파이썬의 클래스 메소드, @staticmethod

사전의 값을 객체속성처럼 접근하는 방법 – Python

파이썬의 사전은 키-값쌍의 형태로 데이터를 구분하여 저장할 수 있고, 사전의 값이 될 수 있는 타입은 제약이 없기 때문에 중첩된 형태의 사전을 만드는 것도 가능하다. 만약 사전의 모든 키가 문자열이라면 사전을 JSON 데이터로 변환할 수 있다. JSON은 자바스크립트에서, 자바스크립트 객체로 바로 변환할 수 있다. 따라서 자바스크립트에서는 root.somekey.nestedkey와 같은 식으로 객체 속성으로 접근해서 특정 위치의 값을 액세스하는 것이 가능하다는 말이다. 이에 반해 파이썬에서 JSON은 사전으로 파싱되고, 같은 데이터에 접근하기 위해서는 root[‘somekey’][‘nestedkey’] 와 같은 식으로 접근해야 한다. 이것을 자바스크립트에서처럼 root.somekey.nestedkey와 같이 액세스하기 위해서… 더 보기 »사전의 값을 객체속성처럼 접근하는 방법 – Python

파이썬의 데코레이터와 고차함수

데코레이터(decorator)는 말 그대로 어떤 객체에 대해서 부가적인 기능을 덧붙이는 것을 말한다. 어떤 클래스에 대해서 기능을 추가하려 할 때에 보통 그 클래스를 서브 클래싱하는데, 파이썬에서 데코레이터는 클래스가 아닌 임의의 함수에 대해서 기능을 추가한다. 언뜻 보기에 별 의미 없을 것 같은 이러한 패턴은 특정한 맥락에서는 코드를 간결하게 만들면서 문법적으로 깔끔하게 정리되는 코드를 만들 수 있는 장점이 있다. 오늘은 파이썬의 데코레이터는 어떻게 만들어지며, 어떤 상황에서 쓰일 수 있는지 알아보도록 하자.
더 보기 »파이썬의 데코레이터와 고차함수

[Python] 네이버 블로그 xml-rpc 클라이언트 만들기 – 1

xml-rpc 클라이언트 만들기

여러 개의 블로그 (최근 들어 마이크로블로깅 도구들도 쓰고 있으니)를 운영하다보면 가장 큰 문제 중 하나가 글이 여기 저기로 분산되다보니 한 곳에서 보아 볼 수 있는 방법이 없을까 하는 생각이 들었다. (또한 아내가 네이버 블로그를 시작한 것도 있고 해서) 네이버라는 플랫폼 자체는 그닥 마음에 들지는 않지만 아내는 사실 오픈된 블로깅보다는 이웃공개 등의 커뮤니티성 서비스를 원하는 것도 있고 또 네이버 블로그 자체가 유입량은 상당히 많다보니 다른 곳에 써 온 글을 네이버로 옮기는 작업을 해야 한다.더 보기 »[Python] 네이버 블로그 xml-rpc 클라이언트 만들기 – 1

[파이썬] 특정 웹주소의 소스를 긁어와 출력해주는 코드

파이썬의 가장 큰 장점 중의 하나는 웬만한 리눅스 서버에는 그냥 설치가 되어 있다는 점. 터미널 상으로는 웹브라우저를 돌려볼 수 없으니, 서버에서 다른 서버로의 웹 접근을 확인하기 위한 용도로 활용할 수 있는 코드를 소개한다…라지만 사실은 내가 나중에 또 쓸일이 있을까봐 기록해 둔 것.

with 구문과 컨텍스트 매니저

파일이나 소켓과 같은 특정한 리소스에 액세스하는 경우에 일반적으로 해당 리소스를 열면서 제어를 위한 핸들을 얻고, 리소스의 회수를 위해서 모든 작업이 완료된 경우에는 반드시 해당 핸들을 닫는 식의 흐름이 필요하다. 하지만 리소스의 열기와 닫기 사이에는 예측하지 못한 변수가 발생할 수 있다. 특정한 조건에 의해서나 예외가 발생하는 등의 이유로 리소스의 정리를 못한채로 루틴이 끝나거나 프로그램이 종료되는 경우가 발생할 수 있다. 따라서 이런 경우에는  try/except/finally 구문을 통해서 흐름의 끝에서 리소스를 정리하고 루틴을 떠나는 형태로 코드를 작성하는 방법도 있지만, 이러한 방법 역시 예외가 발생하는… 더 보기 »with 구문과 컨텍스트 매니저

[python] 문자열로 그 이름을 가진 속성에 접근하기

Key-Value coding in Python

파이썬에서 키-밸류코딩(문자열을 통해 특정 멤버변수 혹은 로컬변수에 접근)하는 방법에 대해 알아보자.

전역변수 혹은 지역 변수에 대해 문자열로 접근하기

globals() , locals() 함수는 각각 전역변수와 지역변수의 키-값 쌍을 사전으로 반환한다. 따라서 locals()['someVar']라고 쓰면 지역변수 someVar의 값을 구할 수 있다. 이 방법은 파이썬2, 파이썬3에서 공통적으로 사용 가능하다.

객체의 속성값(멤버)에 대해 문자열로 접근하기

getattr(), setattr()을 사용하면 특정한 객체 내부의 값에 대해 문자열로 접근할 수 있다.

호출 가능한 속성인지 확인하기

파이썬에서는 객체의 속성에 대해 객체인지, 값인지 (파이썬은 상수도 객체로 인식한다.) 혹은 함수인지 (파이썬은 함수도 객체로 인식한다.) 아리송할 때가 있다. 이 때는 callable()함수를 사용해서 해당 객체를 넣어주면 호출 가능한지 아닌지 알 수 있게 된다. (호출 가능한 속성은 내부적으로 다시 call 함수가 정의되어 있다. 클래스를 정의할 때도 해당 클래스의 call 함수를 정의해두면 클래스 이름을 함수처럼 사용할 수 있다.

def viewAttrs(obj):
    for ar in dir(obj):
        if callable(getattr(obj,ar)):
            print "Callable >> %s : %s\n\n" % (ar, getattr(obj,ar).__doc__)
        else:
            print "Property >> %s : %s\n\n" % (ar, getattr(obj,ar).__doc__)

위 코드는 특정 객체를 받아, 해당 객체의 모든 속성을 조사하여 실행 가능한지 여부와 함께, 해당 속성의 문서화된 정보를 표시해준다. 참고로 hasattr()도 있고, 이는 당연히 객체가 주어진 이름을 갖는 속성을 가지고 있는지 알아내는 함수이다.더 보기 »[python] 문자열로 그 이름을 가진 속성에 접근하기

Flask 설치하기

Flask Flask는 아마도 Pyramid보다도 더 작은 미니멀한 웹 프레임워크로 보인다. 역시나 자세한 설명은 생략한다 홈페이지에서. 설치 eazy_install로 한 방에 할 수도 있는데, 아무래도 가상 환경(virtualenv)을 사용하면 좀 더 깔끔하다. 홈페이지에 소개되어 있는 설치 방법 가상환경은 virtualenv 패키지로 간단히 생성할 수 있다. virtualenv 패키지는 easy_install로 설치할 수 있음 c:\> python27\scripts\virtualenv fenv c:\> cd fenv c:\fenv> scripts\activate 이 시점에서 프롬프트가 바뀌고 가상환경이 활성화되었음을 알 수 있다. (fenv) c:\fenv> pip install Flask 다음은 홈페이지에서 소개하고 있는 간단한 예제이다. from flask import Flask app… 더 보기 »Flask 설치하기

Sqlite3 모듈의 기본 사용법

간단한 예제로 sqlite3 모듈을 사용해서 데이터베이스를 조작하는 방법을 살펴보자. 파이썬은 sqlite3 데이터베이스를 사용할 수 있도록 sqlite3 모듈을 내장하고 있다. 기본적인 사용 순서는 다음과 같다. sqlite3.connect()를 사용해서 데이터베이스 파일을 열고 연결한다. connection 객체가 생성되며, 이를 통해 쿼리를 전달할 수 있다. connection.execute()를 사용해서 쿼리를 전송하고 실행할 수 있다. execute()의 결과로 cursor 객체를 얻게 되는데, 이 객체를 사용해서 영향을 받은 row의 수를 확인하거나, SELECT 문의 경우 각각의 row를 읽어올 수 있다.