본문 바로가기
프로그래밍/파이썬

파이썬 기초 [점프 투 파이썬 - 날개달기]

by 훨훨날아 2021. 5. 28.

프로그래밍의 꽃이라 할 수 있는 클래스, 모듈, 패키지, 예외처리, 내장함수, 라이브러리에 대해서 배운다.

 

클래스

같은 동작을 반복하기 위한 틀이다.

예를 들어 계산기를 만든다면 새로운 값을 계산할때마다 반복되는 동작코드를 작성할 필요없이 하나의 클래스로 만들어주면 클래스만 반복해서 적용시키면된다.

class Calculator:
    def __init__(self):
        self.result = 0

    def add(self, num):
        self.result += num
        return self.result

cal1 = Calculator()
cal2 = Calculator()

print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))

 

클래스와 객체의 관계

    과자를 만드는 틀이 클래스라면 만들어지는 과자는 객체

 

객체와 인스턴스의 차이점 
    인스턴스는 클래로 만들어진 객체를 인스턴스라고 한다. a = 클래스() 라면 a는 객체이고 또한 인스턴스이다. 하지만 인스턴스를 사용할 때는 클래스와의 관계도 같이 말해주어야 더 적합한 표현이다. a 는 클래스의 인스턴스이다.

 

클래스를 만들때 클래스가 작동하도록 pass 함수를 사용하여 임시로 작동하게 만든다.

>>> class FourCal:
...     pass

클래스 안에서 setdata라는 함수를 정의한다. 클래스 안에 구현된 함수는 다른말로 매서드(method)라고 부른다.

>>> class FourCal:
...     def setdata(self, first, second):
...         self.first = first
...         self.second = second

 

setdata 매서드는 self, first, second 값을 입력값으로 받는다. 첫번째로 입력되는 self는 매서드가 클래스를 통해서 적용되는 현재 자신의 값을 나타내는 것이다. 관례적으로 self라고 사용하며 다른 문자를 입력해도 상관없다.

def setdata(self, first, second):   # ① 메서드의 매개변수
    self.first = first              # ② 메서드의 수행문
    self.second = second            # ② 메서드의 수행문

a.setdata(1,2) 를 했을때 a.first 는 1 값을 출력하고 a.second는 2를 출력한다.

 

a = Fourcal() , b=Fourcal(), a.setdata(1,2) b.setdata(4,5) 와 같이 a와 b를 같은 클래스를 적용시켜 매서드를 적용시키면 서로 다른 값이 출력된다. (같은 클래스를 적용시켜도 값이 서로 다른 곳에 저장된다)

생성자(Constructor)
    객체에 초깃값을 설정할 필요가 있을 때에는 매서트를 불러와서 값을 설정하기보단 객체가 만들어질때 ( 클래스를 적용시킬때) 생성자를 만들도록 하는 것이 안전한 방법이다. 생성자는 객체가 생성될 때 자동으로 호출되는 매서드를 의미한다. 
     __init__ init앞뒤로  _ 를 두개 붙여서 정의하면 생성자로 인식한다. 

초기값을 매서드로 입력하면 클래스를 만들어준 후 매서드에 값을 입력해야하지만 생성자를 만들면 클래스로 만들때 값을 입력시킬 수 있다.

 a = FourCal() 
 a.setdata(4,2)
 
 a = FourCal(4, 2)

 

클래스의 상속(Inheritance) 는 기존의 클래스의 매서드을 다 포함하면서 새롭게 클래스를 정의 할 수 있는 기능이다. 새롭게 정의하는 클래스 뒤에 기존클래스를 넣어주면 기존클래스의 매서드을 다 포함하면서 새로운 매서드를 넣을 수 있다.

class morefunction(FourCal):
    def pow(self):
        result = self.first ** self.second
        return result

클래스 상속시 같은 매서드가 있다면 새롭게 정의하는 매서드가 덮어씌워져서 (overriding) 되어 출력된다.

 

클래스 안에서 정의된 클래스변수는 동일한 클래스에 똑같이 적용된다.

class Family:
    lastname = "김"

a.Family() 
b.Family() a,b 에 family클래스를 적용하면

a.lastname -> 김
b.lastname -> 김 lastname에 값은 값을 가진다.

Family.lastname = "박" 으로 변경

a.lastname -> 박
b.lastname -> 박 으로 둘다 변경된다.

 

==== 35분 ====

 

모듈

모듈이란 ? 함수나 변수 또는 클래스를 모아 놓은 파일이다. 파이썬 확장자.py로 만든 파이썬 파일은 모두 모듈이다.

모듈파일이 있는 곳에서 import를 통해서 모듈을 불러오고 모듈이름.매서드 와 같은 형식으로 매서드를 사용할 수 있다.

import 모듈이름

묘듈이름.매서드(값)

 

특정 함수만 사용하기 위해서는 from 과 import를 이용해서 모듈의 이름을 입력하지 않아도 사용할 수 있도록 할 수 있다.

from 모듈이름 import 함수이름

함수이름()


from 모듈 import *

import * 를 하면 모듈안에 있는 모든 함수를 가져온다.

 

import 모듈을 할때 모듈안에 print함수가 있을경우 import 모듈하면 모듈만 불러오는 것이 아니라 값도 출력되면서 결과값도 같이 출력된다. 이러한 문제를 방지하기 위해서는 import로 모듈을 불러오면 print가 되지 않도록 코드를 변경해야한다.

다음과 같이 모듈에서 print의 조건문을 if __name__ == "__main__": 로설정하면 import로 모듈을 불러왔을 때 print가 실행되지 않는다.

# mod1.py 
def add(a, b): 
    return a+b

def sub(a, b): 
    return a-b

if __name__ == "__main__":
    print(add(1, 4))
    print(sub(4, 2))

 

__main__은 파이썬파일이 직접적으로 사용될때 파일이름이 저장되는 글로벌변수이다. 그래서 모듈파일이 직접적으로 실행되면 __main__에 이름이 저장되고 __name__과 같아져서 값을 출력한다. 하지만 ,import로 모듈이 읽히면 __main__에 값이 저장되지 않아서 print 값이 출력되지 않는다.

 

sys 모듈은 파이썬 라이브러리가 설치되어 있는 디렉토리를 확인할 수 있다.
    sys.path 파이썬 라이브러리가 설치되어 있는 디랙토리를 보여준다. 사용하려는 모듈이 디렉토리안에 있다면 모듈을 어디서나 사용할 수 있다. 리스트 함수이기 때문에 sys.path.append("모듈경로")를 추가하면 모듈을 자유롭게 사용할 수 있다.

 

==== 25분 ====

 

패키지

파이썬 모듈을 계층적으로 관리할수 있도록 만들어준다

하위 폴더안에 __init__.py 를 넣어줘야 하위 폴더까지 패키지인것을 나타낸다. 

=== 5분 === 

 

예외처리

프로그래밍을 하다보면 다양항 오류가 발생한다. 오류가 났을 때 강제적으로 무시하는 방법

try, except 문
    try :
    except 오류이름 as 오류메시지 변수 : ((오류이름과 as 오류메시지변수값이 없어도 작동한다)
    except :  expcet을 여러개 작성하여 여러가지 오류에 대응할 수 있다.

try, fianlly 문
    try:
    fianlly:      오류가 발생해도 finally로 넘어가서 동작이 작동한다.

try, except 문에 else를 사용하여 오류가 나지 않을 경우 수행하는 조건문을 만들 수 있다.

try, except, pass를 이용하여 특정 오류에 대해 무시하도록 만들 수 있다.

raise를 이용하여 오류를 강제로 발생시킬 수 있다. raise NotImplementedError ( 파이썬 내장오류로, 꼭 장성해야하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용한다.

exception Exception as e: 모든 예외의 에러 메시지를 출력할때는 Exception을 사용한다.
     print('예외 발생', e)

==== 20분 ====  실제 사용해보지 않아서 그런가보다 하고 이해만 하고 넘어갔다.

 

내장함수 

많은 사람들이 이미 만들어서 검증된 함수들이 파이썬에 내장함수로 들어가 있다. ( Don't reinvent the wheel)

map(f, iterable)은 함수와 반복 가능한자료형을 입력으로 받는다. 

# two_times.py
def two_times(numberList):
    result = [ ]
    for number in numberList:
        result.append(number*2)
    return result

result = two_times([1, 2, 3, 4])
print(result)



>>> def two_times(x): 
...     return x*2
...
>>> list(map(two_times, [1, 2, 3, 4]))
[2, 4, 6, 8]

 

==== 10분 ==== 대부분 아는 것인데 두세가지 처음보는 함수들이 있다. 나중에 필요하면 찾아보면 될 것 같다.

라이브러리

전세계 사용자들이 모아놓은 유용한 모들들이다.

==== 5분 ==== 이런것이 있구나 하고 한번 읽어보았다.

반응형