보이기/숨기기 가능합니다^^
분류 전체보기 (239)
블로그 일기 (8)
건강과 운동 (7)
프로그래밍 언어 (38)
Linux (4)
Dreamweaver (1)
PhotoShop (0)
서재 (40)
자산관리 (6)
정리용(임시) (15)
스크랩북 (94)
시험일정 (10)
응급처치 (3)
무예 (0)
언어 (4)
인상록 (2)
여러가지 (1)
보이기/숨기기 가능합니다^^
2008/08 (21)
2008/07 (43)
2008/06 (36)
2008/05 (54)
제13장 예외처리
프로그래밍 언어/Python | 2008/08/18 09:23
예외처리

문법 에러(syntax error)
- 문법이 맞이 않아 진행 못함
예외(expeption)
- 문법은 맞으나 코드를 더 이상 진행 할 수 없는 상황 # ZeroDivionError, TypeError, NameError, IndexError, KeyError

try/except/else 절 사용하기

try:
    문들1
except    예외종류1:
    문들2
except    예외종류2
    문들3
else:
    문들4 # 예외 발생하지 않을 경우 실행


간접 예외 검출
def this_fails():
    x = 1 / 0
     try:
        this_fails()
    except ZeroDivisionError, msg:
        print 'Run-Time error:', msg

모든 예외에 대한 처리
try:
    some_job()
except:
    ...


try/finally
- 예외 발생에 관계없이 모두 수행(excpet와 함께 사용 불가)

f = open(filename, "w")
try:
    do_something()
finally:
    f.close()

내장 예외의 종류
- 클래스 상속관계로 정의
Exception(모든 예외의 루트 클래스)
StandardError
ArithmeticError
LookupError
EnvironmentError

한 종류의 예외 잡아내기
- 위의 내장 예외 사용, 대표 예외

raise로 예외 발생하기
- 문자열 정의 사용자 예외 발생하기

raise 'my exception'

내장 예외 발생하기
raise IndexError

사용자 정의 클래스 예외 만들기
class MyException(Exception):
    pass

try:
    raise MyException
except MyException:
    print 'caught'

assert문으로 예외 발생
- assert 테스트코드, 데이터
- '테스트코드'가 거짓이면 'raiseAssertionError, 데이터'예외 발생

assert 10 > 4 * 2, '10 is bigger'
assert 10 > 4 * 3, '10 is bigger'
Trackback 0 : Comment 0
위로
http://iruda.tistory.com/trackback/321
제12장
프로그래밍 언어/Python | 2008/08/17 09:22
파이썬 클래스
- 하나의 이름 공간
- 함수(메쏘드)와 변수(멤버)를 갖는다
- 상속(inheritance)이 된다
- 연산자 중복 지원

클래스 인스턴스
- 클래스를 호출하여 만들어지는 객체
(이건 구조체..- 내 생각에는)

class Simple: # 헤더(header)

    pass # 몸체(body)

인스턴스 객체의 생성

s1 = simple() # 클래스 인스턴스(구조체 변수 선언?)
s2 = simple()
s1.stack = [] # s1에만 stack=[]이 생성 클래스 인스턴스는 독립적이다.

메쏘드 정의하기
- 일반 함수 정의와 동일
- 첫 인수로 인스턴스 객체가 온다(self)
- self는 C++,Java의 this와 비슷

class MyClass:
    def set(self,v):
        self.value = v
    def put(self):
        print self.value


메쏘드 호출하기
- bound instance method
c = MyClass() # 인스턴스 생성
c.set('egg') # 메쏘드 set 호출
c.put() # 메쏘드 put 호출
egg

- unbound instance method
MyClass.set(c,'egg')
MyClass.put(c)
egg

클래스 내부에서의 메쏘드 호출
class MyClass2:
    def set(self,v):
        self.value = v
    def incr(self):
        self.set(self.value + 1)
    def put(self):
        print self.value

정적 메쏘드(static method, 2.2)
- 인스턴스 객체 없이 클래스에서 직접 호출할 수 있는 메쏘드

class D:
def spam(x,y): # self가 없다
    print 'static method', x,y
spam = staticmethod(spam)

D.spam(1,2) # 클래스에서 직접 호출
static method 1 2

d = D()
d.spam(1,2) # 인스턴스를 통하여 호출

클래스 메쏘드(class method, 2.2)
- 첫 인수로 클래스 객체를 받는다
class c:
    def spam(cls, y):
        print cls,y
    spam = classmethod(spam)

print C
_main_.C

C.spam(5)
_main_.C 5

TrueCrpyt,
TiSync,UOsync,AllwaySync 동기화 프로그램

포터블 프로그램
- 포터블 인터넷 브라우저(The World)
Jw broweser 즐겨찾기(설정 그대로)

포터블 오피스 계열의 프로그램
OpenOffice...

포토샵, 7-Zip 그래픽 뷰어
런쳐?
USBPRO UO lauchpro

가상 운영체제
VMware,
Virtual PC,Virtual Box # 무료
Moka5
mojopac

SLC,대용량

USBOFFICE


클래스 멤버와 인스턴스 멤버
클래스멤버
- 클래스 이름 공간에 생성
- 모든 인스턴스 객체들이 공유

인스턴스 멤버
- 인스턴스 내에서만 사용

class Var:
    c_mem = 100 # 클래스 멤버 정의
    def f(self):
        self.i_mem = 200 # 인스턴스 멤버 정의
    def g(self):
        print self.i_mem
        print self.c_mem

생성장와 소멸자
from time import time, ctime, sleep

class Life:
    def _init_(self): # 생성자
        self.birth = ctime() # 현재 시간
        print 'Birthday', self.birth # 현재 시간 출력
    def _del_(self): # 소멸자
        print 'Deathday', ctime() # 소멸 시간 출력

mylife = Life()
print 'sleeping for 3 sec'
sleep(3) # 프로세서의 실행을 정지하는 함수

연산자 중복
class MyString:
    def _init_(self,str):
        self.str = str
    def _div_(self.sep):
        return self.str.split(sep)

m = Mystring('abcde')
m / 'c' # _div == '/'
['ab', 'de']

_coerce_
- 다른 두 자료형에 수치 자료형이 적용될 때 두 자료형을 조정해 주는 메쏘드

class MyNum:
    def _init_(self,n):
        self.n = n
    def _coerce_(self,y):
        return self.n, y

a = MyNum(10)
a + 20
30

상속(Inheritance):
- 기존의 클래스의 속성과 행동을 그대로 받아들이고 추가적으로 필요한 기능을 새로운 클래스에 덧붙이는 것

A 슈퍼 클래스
B 하위 클래스
B "is-a" A 관계

다중 상속(Multiple Inheritance)

class Person:
    def _init_(self, name, phone=none):
    self.name = name
    self.phone = phone
    def display(self):
    return '<Person %s %s>' % (self.name, self.phone)
    def _repr_(self):
    return 'name=%s phone=%s' % (self.name, self.phone)
class Employee(Person):
    def _init_(self, name, phone, position, salary):
    Person._init_(self, name, phone) # 언바운드 클래스 메쏘드 호출로 호출해야 한다
    self.position = position
    self.salary = salary

m1 = Employee('손창희', '5520', '대리', 200)


메쏘드의 대치

메쏘드의 확장

class Employee(Person):
    def _init_(self,name,phone,position,salary):
    Person._init(self,name,phone)
    self.positon = position
    self.salary = salary
    def _repr_(self):
    s = Person._repr_(self)
    return '%s pos=%s sal=%s' % (s, self.position, self.salary) # 메쏘드 확장


상속 - 다중상속
- 클래스가 두 개 이상의 슈퍼클래스로 부터 상속 받는 것

class Employee(Person, Job)
    def _init_(self, name, phone, position, salary):
    Person._init_(self,name,phone) # 언바운드 클래스 메써드 호출
    Job._init_(self,position,salary) # 언바운드 클래스 메써드 호출

메쏘드 처리 순서
- 먼저 쓴 순서대로

다이아몬드형 다중 상속
- 메쏘드 처리 순서(MRO-method resolution order)

가상 함수
- 메쏘드의 호출이 참조되는 클래스 인스턴스에 따라서 동적으로 결정되는 함수
- 파이썬 클래스의 모든 메쏘드는 가상 함수

상속의 예
명령어 해석기의 설계
- cmd.cmd 부클래스를 하나 만드록
- 수퍼 클래스의 생성자 루틴을 수행하고,
- 프롬프트 모양을 정해주고
- 필요한 멤버를 만들어 이용하면 된다

명령어 정의하는 법
- 명령어 메쏘드 : do_명령어
- 도움말 메쏘드 : help_명령어

import sys,cmd

class MyCmd(cmd.Cmd):
    def _init_(self):
        cmd.Cmd._init_(self)
        self.promprt = "-->"
        self.list = []
    def do_add(self, x):
        if x and (x not in self.list):
        self.list.append(x)
    def help_add(self):
        print 'help for add'
    def do_EOF(self,x)
        sys.exit()

상속관계의 클래스 정보 알아내기
- isinstance() # 객체가 어떤 클래스에 속해 있는지 확인
- issubclass() # 클래스간의 상속 관계 알아보기
- _bases_ # 슈퍼 클래스 목록 얻기
- _class_ # 인스턴스 객체의 목록 얻기
- _dict_ # 클래스와 인스턴스의 이름 공간 얻기

    
명령어 해석기 실행
- cmdloop() 메쏘드 실행

협동적 클래스와 슈퍼

협동적 클래스?
- 상속 관계에 있는 클래스들이 super 콜을 이용하여 협동적으로 하나의 작업을 수행하는 것
-super(자신의 클래스이름,self).메쏘드()
-MRO(method resolution order)에 따라서 수펴 클래스의 메쏘드를 자동으로 호출한다 # 다이아몬드형 다중 상속시 유용
# 부모 클래스의 이름을 정확히 몰라도 사용 가능
- 슈퍼 클래스는 반드시 Object로부터 상속 받아야 한다

내장 자료형과 클래스 # 2.2부터
- 자료형과 생성자 이름 일치
type('')(123) == str(123)
- 클래스와 자료형의 일치

내장 자료형 서브 클래싱하기(Stack)
class Stack(list):
    push = list.append

s = Stack()
s.push(1)
s.pust('spam')
s # [1,'spam']

내장 자료형 서브 클래싱(XML 형식 출력하기)
class xmldic(dict):
    def _repr_(self):
    res = ['\n<dictionary>']
    for k,v in self.items():
    res.append('<member>')
    res.append('<name>%s</name>

다형성(Polymorphism)
- "여러 개의 형태를 가진다"
- 상속 관계에 있는 다른 클래스들의 인스턴스들이 같은 멤버 함수 호출에 대해 각각 다르게 반응하는 것
- 오버로딩? # 다양한 인수에 적용되는 함수.. 인수에 따라 함수 각각 정의

class Animal:
    def cry(self):
        print '...'
class Dog(Animal):
    def cry(self):
        print '멍멍'
class Duck(Anmail):
    def cry(self):
        print '꽥꽥'
for each in (Dog(), Duck(), Fish()):
    each.cry()

상속. 합성.
is-a   has-a

캡슐화(encapsulation)
- 필요한 메쏘드와 멤버를 하나의 단위로 묶어 외부에서 접근 가능하도록 인터페이스를 제공 하는 것

캡슐화 방식
- 비공개 방식(black box)
- 공개 방식(white box)

정보 은닉(information hidiong)
- 정보를 숨기는 것

Private 이름 변경 기능
 _ _로 시작하는 이름을 정의. 앞에 _클래스 이름이 추가된다.
Encapsulation _x -> _Encapsulation _x

위임(Delegation)이란?
- 상속 메카니즘 대신에 사용되는 기법
- 자신이 처리할 수 없는 메시지(메쏘드 호출)을 수신하면, 그 메시지를 처리할 수 있는 다른 객체로 전달하는 것
- _getattr_을 이용 # 정의되지 않는 속성을 참조할 때 호출된다
_getattr(self,name)

문서 문자열
- 클래스나 메쏘드 몸체에 처음으로 오는 문자열은 문서 문자열로 간주된다.
#_doc_, 도움말 등으로도 쓸 수 있다

Trackback 0 : Comment 0
위로
http://iruda.tistory.com/trackback/320
[스크랩]직장인 77%, 뒷목 뻐근함 등 건강 ‘적신호’
스크랩북/취업과 창업 | 2008/08/16 16:47
뉴시스 | 기사입력 2008.08.14 10:31
하루 생활 중 대부분을 일터에서 보내는 직장인의 경우 10명 중 8명은 직장 생활을 하며 얻은 지병이 있는 것으로 나타났다.

특히 장시간 책상에 앉아 컴퓨터 모니터를 들여다보고 일을 할 경우 허리를 구부정하게 하거나 목은 쭉 빼고 엉덩이는 의자 끝에 걸치는 자세, 혹은 다리를 꼬고 앉는 등 바람직하지 못한 자세로 목과 어깨 등에 통증이 발생하게 된다. 마치 거북이 목처럼 목만 쭉 빼고 모니터를 보는 '거북목 증후군' 등이 직장인에게 흔히 발생하는 지병인 것으로 조사됐다.

취업포털 커리어(www.career.co.kr)와 여성전문 패션지 SURE가 국내 남녀 직장인 1180명을 대상으로 설문 조사한 결과 77.5%가 오피스 지병이 있다고 답했다.

오피스 질병(복수응답)으로는 '근골격계 질환(거북목증후군, 요통 등)'이 28.0%로 1위를 차지했다.

이어 '만성피로·불면증'은 27.5%, '소화기 질환(과민성대장증후군, 신경성소화불량 등)' 은 19.2%, '안구 건조증'과 '두통'은 각각 16.6% 이었다. 이외에도 '우울증' 9.0%, '호흡기 질환(비염, 천식 등)' 5.9%, '지방간' 5.5%, '탈모증' 4.6% 등이 있었다.

'오피스지병 때문에 병원에 간 적이 있는가'란 질문에는 61.7%가 '있다'고 응답 했으며 '오피스지병으로 인한 퇴사경험'은 15.9%가 있는 것으로 집계됐다.

한편, 전체 응답자를 대상으로 '직장생활에서 받는 가장 큰 스트레스는 무엇인가'를 물어본 결과, 31.5%가 '과도한 업무·잦은 야근으로 인한 스트레스'를 꼽았다.

다음으로 '상사나 동료와의 갈등으로 인한 스트레스'는 23.5%, '기대에 못 미치는 연봉수준으로 인한 스트레스' 18.6%, '적성에 맞지 않는 업무로 인한 스트레스' 12.3%, '실직불안감으로 인한 스트레스'는 10.9% 이었다.

스트레스 해소 방식으로는 '폭음·폭식으로 푼다'가 29.2%로 가장 많았다. '운동을 한다'는 18.9%, '친구들을 만나 수다를 떤다'는 15.3%, '잠이나 휴식을 취한다'는 12.1% 이었다. 이밖에 '그냥 참는다'(9.7%)와 '독서나 영화관람 등 취미생활을 한다'(9.1%), '동호회 활동을 한다'(3.5%) 등도 있었다.

커리어 김기태 대표는 "최근 과도한 스트레스로 만성적 질병을 겪고 있는 직장인들이 늘고 있다"며 "폭음·폭식 등으로 스트레스를 해소하기 보다는 운동이나 동호회 활동 등을 통해 스트레스를 해소한다면 육체적·정신적 건강을 유지할 수 있을 것"이라고 조언했다.
Trackback 0 : Comment 0
위로
http://iruda.tistory.com/trackback/319
이전 페이지 다음 페이지
보이기/숨기기 가능합니다^^
«   2008/08   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
보이기/숨기기 가능합니다^^
이루다의 이야기 05/23
이루다의 이야기 05/23
디자인하는 감정은행 2007
RedcHome.net ::: 꿈을.. 2007
RSSFeed