본문 바로가기

Python

PYTHON 문법 - Class , 상속 , 모듈에 대해 코드를 통해 알아보자

반응형

Immutable (정수 , 실수 문자열 , 튜플) VS Mutable (리스트 , 딕셔너리 , 집합 )

b = [1, 2, 3]


def test_(b):
    b = b.append(4)


test_(b)
print(b)

 리스트 , 딕셔너리 , 집합

글로벌 변수와 지역 변수가 별개의 존재인건 같은데 

같은 주소를 보고 있고 해당 주소에 있는 값들이 변경 되고 있기 때문에 

조회를 하면 변경된 값을 볼 수 있다. 

클래스 ,모듈 ,패키지 ,예외처리 ,내장함수 외장함수 

 

클래스가 무엇이냐 ? 

예를 들면 두개의 계산기가 따로 계산을 해야한다면 ?  

다른 계산기로 다른 계산값이 나와야 한다. 

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))

여기서 self 란 ? 

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


a = FourCal()
a.setdata(5, 6)

print(a.first)
print(a.scond)
class FourCal:
    def setdata(self, first, scond):
        self.first = first
        self.scond = scond
        print(self)

    def add(self):
        result = self.first + self.scond
        return result


a = FourCal()
a.setdata(5, 6)

print(a.first)
print(a.scond)
print(a.add())

__init__ 생성자에 대해서 이해 하셨나요 ?

클래스가 작성 되자마자 실행되는 코드입니다.

class FourCal:
    def __init__(self, first, scond):
        self.first = first
        self.scond = scond

    def add(self):
        result = self.first + self.scond
        return result


a = FourCal(5, 6)
print(a.add())

#상속

class FourCal:
    def __init__(self, first, scond):
        self.first = first
        self.scond = scond

    def add(self):
        result = self.first + self.scond
        return result
# 상속


class MoreFourCla(FourCal):
    def pow(self):
        result = self.first**self.scond
        return result


a = MoreFourCla(5, 6)
print(a.pow())

# 상속해서 부모 함수 변경

class FourCal:
    def __init__(self, first, scond):
        self.first = first
        self.scond = scond

    def add(self):
        result = self.first + self.scond
        return result
# 상속


class MoreFourCla(FourCal):
    def pow(self):
        result = self.first**self.scond
        return result


class SafeFourCla(FourCal):
    def add(self):
        result = self.first + self.scond
        return str(result) + " re-build"


a = MoreFourCla(5, 6)
b = SafeFourCla(7, 8)
print(b.add())

>>>
15 re-build

자식 함수가 부모 함수를 덮어 쓴다  : 오버 라이딩 

#모듈이란 ? 

미리만들어 놓은 py 파일 

from mod1 import add

class FourCal:
    def __init__(self, first, scond):
        self.first = first
        self.scond = scond

    def add(self):
        result = self.first + self.scond
        return result


a = FourCal(5, 6)
print(a.add())
print(add(5, 6))

 

mod1.py

# mode1
def add(a, b):
    result = a+b
    return result


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


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

"__main__"  메인 파일의 위치에서 실행 되어야 코드가 작동하고 

import 된 정보에 대해서는 실행 되지 않는다 

 

패키지란 ?  :모듈 여러개

 

 

일단 import 로 가져와서 함수를 쓰면 된다 ! 

try : 오류가 발생할 수 있는 구문 

except Exceptopn as e : 오류발생

 else : 오류 발생하지 않음 

finally : 조건 마지막에 실행 

try:
    4/0
except ZeroDivisionError as e:
    print(e)

print("HI")

>>>
division by zero
HI

원래 에러가 발생하면 다음 코드 진행이 안되는데 

위 코드를 작성하면  HI 코드 까지 잘 실행 되는 걸 볼 수 있다. 

else 사용법 : 코드가 에러 안나고 문제 없으면 실행해주는 코드 ! 

try:
    f = open("none", "r")
except FileNotFoundError as e:
    print(str(e))
else:
    print("HI")
    data = f.read()
    print(data)
    f.close()

finally 사용법 : 조건 마지막에 무조건 실행 에러 여부 상관 없이 

f = open('foo.txt', 'w')
try:
    data = f.read()
    print(data)
except Exception as e:
    print(e)
finally:
    f.close()

퀴즈 !! 

왜 이런 값이 나오고 이런 값이 나올 수 있는 지유를 설명해보세요 

class Bird:
    def fly(self):
        raise NotImplementedError


class Eagle(Bird):
    def fly(self):
        print("very fast")


eagle = Eagle()
eagle.fly()



>>> 
very fast

답 : 상속을 받을때 부모가 뭐가 선언 되어있던 자식에서 다시 선언되면 자식이 이기는 부분이고 

그래서 일부러 에러가 일어나도록 코드를 짜 놓았는데 페스 되어 넘어 간다 

 

내장 함수 외장 함수 

내장 함수 : 기본적으로 파이썬에 생성되어 있는 함수 pirnt () 

개인적으로 내장함수는 그때그때 찾아서 쓰면 좋다 

중요 일단 filter는 연습해보자 

def positive(x):
    return x > 0


a = list(filter(positive, [1, -3, 2, 0, -5, 6]))
print(a)


>>>
[1, 2, 6]

map , zip

외장함수 : 라이브러리 함수 

sys , pickle , time , sleep ,random , webbrowser

import webbrowser

webbrowser.open('https://smart-factory-lee-joon-ho.tistory.com/')
반응형