/ LECTURE

Python - Module / Class

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

75일차 수업

========복습========

자료형

숫자, 문자열, 리스트, 튜플, 셋, 딕셔너리, 불

리스트 = []

튜플 = ()

딕셔너리 = {키 : 값}

셋 = {}

제어문

if 조건문:	# 조건문 이후에 콜론(:) 작성
    # 실행문, 제어문에 속한 실행문은 들여쓰기로 구분
elif 조건문:
    # 실행문
else:
    # 실행문

반복문

# 집합객체(문자열, 튜플, ..숫자만 아니면 됨)
for 변수 in 집합객체:		# 하나씩 변수에 담아서 반복문 실행
    실행문
else:
    # 실행문, 반복조건이 틀렸을 때 실행
while 조건문:
    # 실행문
else:
    # 실행문

range()

  • 집합객체를 만드는 것을 도와주는 함수

  • 범위를 설정하여 원하는 반복 횟수나 숫자 데이터를 뽑는 함수

comprehension

파이써닉 코드, 파이썬에서만 사용가능한 특별한 문법

li = [for in if] : 리스트 범위 안에 제어문을 통해서 데이터의 입력을 제어하는 방법

함수

자바의 메소드와 비슷한 기능, js의 함수와 비슷

반복되는 코드들이나 역할이 비슷한 기능들을 하나의 블록에 모아놓은 것

def 함수명(파라미터):
    실행문
    return 	# 없으면 None

파라미터, 매개변수 : 함수를 정의할 때 함수 안으로 데이터를 넣어주기 위해 선언한 변수

아규먼트, 인자 : 함수를 호출하면서 안으로 데이터를 집어넣어주는 값

리턴, 출력, 반환 : 함수를 실행하고 반환하는 과정

호출 : 정의된 함수를 실행하기 위해 불러오는 과정

======== 끝 ========

75일차 수업

module

import 파일명		# 파일명.py 파일의 모든 함수 클래스를 호출
from 파일명 import 함수명		# 파일명.py 파일에서 해당 함수를 호출
# 함수를 여러개 가져와야하면 쉼표(,)로 연결
# “as” 키워드를 통해 alias 설정 가능

_name_

파이썬은 스크립트 파일을 작성하기 위한 언어, 리눅스나 유닉스 시스템에서 사용하는 파일의 형태

초기엔 객체의 개념이 없었기 때문에 프로그램의 시작점을 구분할 필요가 없었음

객체의 개념이 생기고, 업그레이드가 되면서 시작점을 나타내기 위해

__name__ 변수와 __main__라는 값이 추가 됨

__name__은 기본적으로 모듈 명을 값으로 가지고, 시작점에서만 __main__이라는 값을 가짐

이를 통해 시작점을 구분

# In second.py
print(second, __name__)

# In first.py
import second			# output “second second”
print(first, __name__)	# output “first __main__”

Package

모듈을 모아 놓은 폴더, 디렉토리

  • 디렉토리 : 폴더만 생성

  • 패키지 : 폴더 내 init.py 생성, 현재 폴더를 단순한 디렉토리가 아니라 모듈로 구성된 패키지라고 알려주는 파일, python 3.3 부터는 생략이 가능함

# import를 하는 다양한 방법

# 모듈 안에 함수 호출
import sound.echo as e
e.echo_test()

# from 패키지명 import 모듈명
from sound import echo
echo.echo_test()

from sound.echo import echo_test
echo_test()

# sound 패키지 안에 모든 모듈을 호출하고 싶을 때
# sound패키지의  __init__.py에서 포함할 모듈명을 작성해준다
__all__ = [echo, wav]

# 다시 돌아와서 호출하면 *로 echo 모듈안 함수를 불러올 수 있다
from sound import *
echo_test()

Class

함수들의 덩어리, 함수들 끼리 데이터를 주고 받거나 변수들을 통해서 하나의 유기체처럼 사용하기 위한 역할

class basic:
    data = Hello		# 전역변수

	def __init__(self):		# 객체를 초기화하는 함수, 생성자 역할
		# init을 통한 변수 생성
		self.name = sponge		# self : 자기 자신, java에서 this와 동일한 기능
		self.age = 20			# 자바에서는 생략되있었다면, python에서는 넣어주는 규칙
		print(init)

	def __del__(self):	# 클래스가 끝나는 지점에 실행, 소멸자 역할
		print(del)

	def basicTest(self):
		print(self.data)

s = basic()	# 클래스 객체화, __init__ 실행, output “init”
print(s.data)	# output “Hello”
s.basicTest()	# output “Hello”
print(s.name)	# output “sponge”
del s		# 클래스 삭제, __del__ 실행, output “del”

클래스 함수

인스턴스 함수 : self인 인스턴스를 인자로 받고, 인스턴스와 묶여 하나의 인스턴스에만 한정된 데이터를 생성, 변경, 참조

class Book:
    cnt = 0
    def __init__(self, title):
        self.title = title

	# 클래스 함수
	@classmethod	# decorator을 작성해주어야함
	def output(cls):	# self(인스턴스)가 아닌 cls(class) 자체를 인자로 받음
		cls.cnt += 1
		# print(cls.title)	클래스에 종속된 함수기 때문에 생성자를 통해 만든 멤버변수를 사용할 수 없음
		print(f개수 : {cls.cnt})

b1 = Book(Emile)
b2 = Book(Sapiens)

b1.output()	# “개수 : 1”
b2.output()	# “개수 : 2”, 인스턴스와 별개로 접근하기 때문에 cnt를 공유함
Book.output()	# “개수 : 3”, 같은 이유로 인스턴스를 생성하지 않아도 함수에 접근 가능

상속

overriding만 존재

다중 상속 지원, 부모 클래스가 2개 이상일 경우 먼저 기술한 부모클래스 우선순위

class Animal:
    def move(self):
        print("동물이 움직인다")

class Wolf(Animal):
    def move(self):
        print("늑대는 네 발로 달린다")

class Human(Animal):
    def move(self):
        print("사람은 두 발로 걷는다")

class WolfHuman(Wolf, Human):
    def move(self):
        print("늑대인간은 두 발로 달린다")
        super().move()

class WolfHuman2(Human, Wolf):
    def move(self):
        print("늑대인간은 두 발로 달린다")
        super().move()

w = Wolf()
w.move()		# output “늑대는 네 발로 달린다”
h = Human()
h.move()		# output “사람은 두 발로 걷는다”
wh = WolfHuman()
wh.move()		# output “늑대인간은 두 발로 달린다 \n늑대는 네 발로 달린다”
wh2 = WolfHuman2()
wh2.move()		# output “늑대인간은 두 발로 달린다 \n사람은 두 발로 걷는다”

Magic method

메소드 이름이 __로 시작해서 __로 끝나는 메소드, 특별 메소드

파이썬 인터프리터에 의해 자동으로 호출되는 메소드

파이썬에서 정의한 기능이 있는 함수명

Overriding을 통해 기능을 바꿀 수 있음

class Sample:
    def __init__(self,name,age):
        self.name = name
        self.age = age

	# 생성자에 담긴 지정된 멤버변수의 값의 출력을 도와주는 기능으로  변경
	def __str__(self):
		return (f이름 : {self.name}, 나이 : {self.age})
	
	# 생성자에 담긴 지정된 멤버변수의 값을 더해주는 기능으로 변경
	def __add__(self, other):
		self.age += other

s = Sample(sponge, 20)
print(s)		# output “이름 : sponge, 나이 : 20”
s + 20
print(s)		# output “이름 : sponge, 나이 : 40”

Exception

try:
    # 예외가 발생 가능한 실행문
except:
    # 예외가 발생하면 실행할 실행문
else:
    # 예외가 발생하지 않으면 실행할 실행문
finally:
    # 예외 발생 여부와 상관없이 실행할 실행문

Handle file

open(파일이름, 모드) : 파일을 여는 함수

모드 : 첫글자만 작성하고, 방법에 대한 표시를 나타냄

  • “r” : read, 파일 읽기

  • “w” : write, 파일 쓰기(파일이 없으면 생성, 있으면 덮어쓰기)

  • “x” : write, 파일 쓰기(파일이 없을 때만 생성해서 작성)

  • “a” : append, 내용 추가(파일이 있으면 내용 추가)

try:
    f = open(temp.txt, r, encoding= utf-8)
except Exception as e:
    print(예외 발생, e)
else:
    while 1:
        line = f.readline()	# 한줄 씩 가져오는 함수
        if not line:
            break
        print(line)
finally:
    f.close()			# 파일을 읽고 나서는 닫아주기
    print(종료)

xml

xml 구조

<employees>
    <employee>
        <no>1</no>
        <name></name>
        <job>책임</job>
    </employee>
</employees>
import xml.etree.cElementTree as et

tree = et.ElementTree(file= temp.xml)
root = tree.getroot()

for child in root:
    for seed in child:
        print(seed.tag, :, seed.text, end=   )
    print( )
# output “no : 1 name : 김 job : 책임”

JSON

JSON 구조

{
    "SpongeBob":{
        "No":1,
        "Job": "주방"
    }
}
import json

f = open(temp.json, r, encoding=utf-8)
data = f.read()
items = json.loads(data)

for item in items:
    print(item, items[item].get(No), items[item].get(Job))
# output “Sponge 1 주방”

for item, values in items.items():
    for i, v in values.items():
        print(item, :, i, v)
# output “Sponge : No 1 \n Sponge : Job 주방”

csv

import csv

# temp.csv에 데이터 넣기
data = [[1, Sponge, chef],[2, Squidward, cashier],[3, Mr.Krab, Boss]]

with open(temp.csv, wt, encoding= utf-8) as f:
c_out = scv.writer(f)
c_out.writerow(data)
# 실행결과 temp.csv에 data 값이 작성됨

# temp.csv 불러오기
data = []
with open(temp.csv, r, encoding= utf-8) as f:
cin = csv.reader(f)
data = [row for a in cin for row in a]
print(data) # output ["[1, 'Sponge', 'chef']", "[2, 'Squidward', 'cashier']", "[3, 'Mr.Krab', 'Boss']"]