📌 Python 단일 상속

  • 단일 상속
    - 다형성을 구사 가능
    - 메소드 오버라이딩을 통해 부모클래스 메소드의 은닉화 가능
    - 자식클래스에 생성자가 있을 경우, 자식클래스 생성자만 호출된다.
    - 부모클래스를 바로 접근하기 위해 super() 키워드 사용
class Animal:       # 상위클래스(부모클래스)
    def move(self):
        print('움직이는 생물')


class Dog(Animal):  # 클래스의 파라미터로 상위클래스(부모클래스)를 상속받는다.
	def move(self):
        print('움직이는 댕댕이')
        super().move()	# 바로 부모클래스에 접근한다.

dog1 = Dog();
dog1.move();
# 출력 : 움직이는 댕댕이
# 출력 : 움직이는 생물
  • private 멤버
    - private 변수 선언 : __변수이름
class Person:
    say = 'person'
    age = '22'
    __kbs = '공영방송'  # private


📌 Python Override

  • method override
    - 부모클래스의 메소드를 자식클래스에서 재정의하는 것
    - 다형성 활성화
class Parent:
    def printData(self):
        pass

class Child1(Parent):
    def printData(self):
        print('Child1에서 재정의')   # 메소드 오버라이딩

class Child2(Parent):
    def printData(self):
        print('Child2에서 override')
        print('오버라이드는 부모의 메소드를 자식이 재정의')

c1 = Child1()
c1.printData()
# 출력 : Child1에서 재정의
print()
c2 = Child2()
c2.printData()
# 출력 : Child2에서 override
# 출력 : 오버라이드는 부모의 메소드를 자식이 재정의


📌 Python 다중 상속

  • 다중 상속
    - 상속받는 파라미터의 순서가 중요하다.
    - 상속받는 순서가 앞에 있을수록 해당 클래스를 참조하는 우선순위가 높아진다.
class Tiger:
    data = '호랑이 세상'

    def cry(self):
        print('호랑이는 어흥')

    def eat(self):
        print('맹수는 고기를 좋아한다.')


class Lion:    
    def cry(self):
        print('사자는 으르렁')

    def hobby(self):
        print('백수의 왕은 낮잡을 즐김')


class Liger1(Tiger, Lion):  # 같은 메소드나 필드가 있으면 Tiger 객체에 먼저 접근함
    pass


class Liger2(Lion, Tiger):  # 같은 메소드나 필드가 있으면 Lion 객체에 먼저 접근함
    pass


l1 = Liger1()
l2 = Liger2()
l1.cry()
l2.cry()


📌 Python 추상 클래스

  • 추상 클래스
    - 다형성을 위해 자식클래스에서 부모클래스의 메소드 오버라이딩을 강제하는 클래스이다.
    - 자식클래스에서 추상메소드를 구현하지 않으면 인스턴스 자체에 에러가 발생한다.
    - 부모클래스의 일반메소드는 자식클래스에서의 구현이 선택적이다.

  • 선언 방법
    1. abc 모듈의 전체 기능을 import한다.
    2. 클래스에 파라미터로 metaclass = ABCMeta를 받는다.
    3. 오버라이딩을 강제할 메소드에 @abstarctmethod 장식자를 붙인다.
# 1. abc 모듈 import
from abc import *

# 2. ABC 모듈에서 ABCMeta를 상속받는다.
class AbstractClass(metaclass = ABCMeta):
    # 3. @abstractmethod 라는 장식자를 통해 추상 메소드로 선언
    @abstractmethod
    def myMethod(self):
        pass


class ImplClass(AbstractClass):
    def aa(self):
        print('aa')

	# 추상 메소드 구현
    def myMethod(self):
        print('추상 메소드 구현함')


impl = ImplClass()
impl.aa()


📌 Python 예외처리

  • try except 문
    - 작업 도중 발생하는 에러에 대처하기
    - 문법 : try ~ except ~ finally ~
def divide(a, b):
    return a/b

try:
    c = divide(5, 1)
    print(c)

    a1 = [1, 2, 3]
    print(a1[2])

    open('c:/a1.txt')
except ZeroDivisionError:
    print('에러 : 0으로 나누면 안됩니다.')
except IndexError:
    print('에러 : 가용된 인덱스를 초과하였습니다.')
except Exception as e:
    print(f'에러 : {e}')
finally:
    print('finally 실행')


📌 Python File I/O

  • File I/O
    - 파일 입출력
    - os 모듈 : 파일 research를 도와주는 모듈 제공
    - os.getcwd() : 현재 파일의 위치를 반환
    - open(파일경로, 읽기쓰기모드, 인코딩) : 파일을 모드에 맞게 열어주는 내장 함수
    - f1.read() : 파일의 전체 내용을 반환
import os

print(os.getcwd())

try:
    print('읽기')
    # f1 = open(r'C:\work\psou\pro1\pack5_fileIO\file_test.txt', mode='r', encoding='utf-8')
    f1 = open('./file_test.txt', 'r', encoding='utf-8')
    print(f1.read())
    f1.close()

    print('저장')
    f2 = open('./file_test.txt', 'w', encoding='utf-8')
    f2.write('a1\n')
    f2.write('a2')
    f2.close()

    print('덮어쓰기')
    f3 = open('./file_test.txt', 'a', encoding='utf-8')
    f3.write('\na3')
    f3.write('\na4')
    f3.write('\na5')
    f3.close()

    print('읽기')
    f4 = open('./file_test.txt', 'r', encoding='utf-8')
    for li in f4:
        print(li)
    f4.close()

except Exception as e:
    print(f'에러 : {e}')
  • with + open()
    - with 블록 안에서 파일 입출력 처리를 한번에 하는 작업
try:
    # 저장
    with open('./file_test3.txt', mode='w', encoding='utf-8') as f1:
        f1.write('파이썬 문서 저장\n')
        f1.write('with문을 쓰면\n')
        f1.write('명시적으로 close()를 하지 않는다.')

    with open('./file_test3.txt', 'r', encoding='utf-8') as f2:
        reader = f2.read()
        print(reader)

except Exception as e:
    print(f'에러 : {e}')
  • read 모드에서 여러 줄을 차례로 읽는 법
  • for문 사용
for li in f1:
	print(li)
  • while문 사용
line = f1.readline()
while line:
	print(line)
   line = f1.readline()
try:
    addr = input('동 이름 입력 : ')

    with open('./zipcode.txt', 'r', encoding='euc-kr') as f1:
        line = f1.readline()
        while line:
            # line = line.split('\t')
            line = line.split(chr(9))
            if line[3].startswith(addr):
                if line[1] == '경기':
                    print(f'[{line[0]}] - {line[1]}{line[2]} {line[3]}')
                else:
                    print(f'[{line[0]}] - {line[1]}{line[2]} {line[3]}')

            line = f1.readline()
except Exception as e:
    print(f'에러 : {e}')


📌 Python Pickle 모듈

  • Pickle 모듈
    - 모듈이나 모델 등을 객체화시켜서 저장하거나 로드한다.
    - 용량이 큰 BERT 모델같은 경우에 zip 형태의 pickle로 쉽게 저장할 수 있다.
import pickle

test = ()
test2 = []
test3 = []
try:
    dictData = {'a1':'111-1234', 'a2':'123-1234'}
    listData = ['곡물', '새우깡']
    tupleData = (listData, dictData)

    # 객체로 저장할 때는 wb로 저장함
    with open('./tupleObject.pickle', 'wb') as f1:
        pickle.dump(tupleData, f1)
        pickle.dump('aa', f1)

	# 객체를 읽을 때는 rb로 저장함
    with open('./tupleObject.pickle', 'rb') as f2:
        test, test2 = pickle.load(f2)
        test3 = pickle.load(f2)
except Exception as e:
    print(f'에러 : {e}')


print(test)
print(test2)
print(test3)


📌 Python Splite3 연결

  • sqlite3
    - 파이썬 기본 개인용(로컬용) 데이터베이스
import sqlite3

conn = sqlite3.connect('exam.db')
conn = sqlite3.connect(':memory:')  # ram에 일시적으로 데이터가 저장된다. (휘발성) = 테스트용

try:
    cursor = conn.cursor()  # cursor를 이용해서 SQL문 처리

    # 테이블 생성
    cursor.execute("CREATE TABLE if not exists fritab(name text, phone text)")

    # 자료 추가
    cursor.execute("INSERT INTO fritab(name, phone) VALUES('한국인', '111-1234')")
    cursor.execute("INSERT INTO fritab(name, phone) VALUES('a1', '123-1234')")
    cursor.execute("INSERT INTO fritab(name, phone) VALUES('a2', '122-1234')")
    inputdata = ('a3', '133-1234')
    cursor.execute(f"INSERT INTO fritab(name, phone) VALUES{inputdata}")
    conn.commit()

    # SELECT
    cursor.execute("SELECT * FROM fritab")
    print(cursor.fetchone())
    print()
    list = cursor.fetchall()
    for li in list:
        print(li)

except Exception as e:
    print(f'에러 : {e}')
finally:
    conn.close()


📌 Python MariaDB 설치 및 실행

  • MariaDB

- anaconda prompt에서 pip install mysqlclient 입력
1. MariaDB 설치 : Windows 64bits 설치

1-1. root password, confirm 비밀번호 설정한다.
1-2. Enable access와 use UTF8를 체크하기


2. Command Prompt (MariaDB 10.9) 실행

2-1. mariadb -uroot -h127.0.0.1 -p 입력 후, 비밀번호 입력
2-2. DB 확인 : show databases;
2-3. DB 생성 : create database test;
2-4. DB 이동 : use test;
2-5. DB 삭제 : drop database test;


3. 테이블 관리

3-1. 전체 테이블 확인 : show tables;
3-2. 특정 테이블 구조 : desc 테이블명;
3-3. 테이블 생성 : create table 테이블명(칼럼명 데이터타입, ....);


4. 데이터 관리

4-1. 데이터 삽입 : insert into 테이블명(칼럼1, 칼럼2, ..) values(데이터1, 데이터2, ..);
4-2. 데이터 수정 : UPDATE 테이블명 SET 칼럼1=수정값, 칼럼2=수정값 WHERE 칼럼=값;
4-3. 데이터 삭제 : DELETE FROM 테이블명 WHERE 칼럼=값;



profile
데이터 사이언티스트를 목표로 하는 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN