Python/수업

파이썬 문법 심화 1주차 2_Sparta Coding Club

끈끈 2023. 3. 23. 10:28

 

https://sw-ing.tistory.com/31

 

파이썬 함수(function)와 메서드(method)의 차이

함수(function) 함수명() len(), int(), str() 등 어떠한 기능을 수행하는 친구 클래스 및 객체와 상관없이 독립적으로 존재함 함수의 값을 변수에 대입 가능 즉 매개변수를 통해 자료 전달 output = function_

sw-ing.tistory.com

 

class 심화

 

__init__() : 클래스의 초기 상태를 정의할 수 있는 메서드

 

class에 __init__ 메서드를 사용하면 클래스 처음 작동 혹은 인스턴스 생성시 해당 메서드가 실행됨

 

class CookieFrame():
    def __init__(self, name):
        print(f"생성 된 과자의 이름은 {name} 입니다!")
        self.name = name


cookie1 = CookieFrame("cookie1")  # 생성 된 과자의 이름은 cookie1 입니다!
cookie2 = CookieFrame("cookie2")  # 생성 된 과자의 이름은 cookie2 입니다!

 

메서드의 self란?

 

각 메서드의 처음 입력값으로서 인스턴스를 받아들인다는 의미

 

문법적으로는 사용하지 않아도 되지만, 사용하면 가독성이 좋다

 

인자가 입력되지 않아도 코드를 실행시키고 싶다면 name="기본값"

 

class CookieFrame():
    def __init__(self, name="default"):
        print(f"생성 된 과자의 이름은 {name} 입니다!")
        self.name = name


cookie1 = CookieFrame()  # 생성 된 과자의 이름은 default 입니다!

 

상속이란?

 

클래스를 생성할 때 다른 클래스에서 선언된 변수, 메서드 등의 기능들을 가져와 사용할 수 있도록 해주는 기능

 

  • 상속해주는 클래스 : 부모(parents) or 슈퍼(super) 클래스
  • 상속받는 클래스 : 자식(child) or 서브(sub) 클래스

 

class Monster():
    def __init__(self, hp):
        self.hp = hp

    def attack(self, damage):
        self.hp -= damage

    def status_check(self):
        print(f"monster's hp : {self.hp}")


class FireMonster(Monster):
    def __init__(self, hp):
        self.attribute = "fire"
        # super()를 사용하면 부모 클래스의 코드를 그대로 사용할 수 있습니다.
        # 해당 코드는 self.hp = hp 코드를 실행시키는 것과 동일합니다.
        super().__init__(hp)

    # 부모 클래스에 존재하는 status_check 메소드를 overriding 합니다.
    def status_check(self):
        print(f"fire monster's hp : {self.hp}")


class IceMonster(Monster):
    def __init__(self, hp):
        self.attribute = "ice"
        super().__init__(hp)

    def status_check(self):
        print(f"ice monster's hp : {self.hp}")


fire_monster = FireMonster(hp=100)
# FireMonster 클래스에는 attack 메소드가 없지만
# 부모 클래스에서 상속받았기 때문에 별도의 선언 없이 사용 가능합니다.
fire_monster.attack(20)
fire_monster.status_check()

ice_monster = IceMonster(hp=200)
ice_monster.attack(50)
ice_monster.status_check()

 

class Calc:
    def _print_zero_division_error(self):
        print("can't be division by zero")

    def plus(self, num1, num2):
        ...

    def minus(self, num1, num2):
        ...

    def divide(self, num1, num2):
        if num2 == 0:
            self._print_zero_division_error()
            return False
        ...

    def multiply(self, num1, num2):
        ...


class CustomCalc(Calc):
    def _print_zero_division_error(self):
        print("0으로는 나눌 수 없습니다.")


calc = CustomCalc()
calc.divide(5, 0)

 

오버라이딩(overriding):

 

자식클래스에서 부모클래스에 존재하는 메서드와 같은 이름으로 생성하는 것

 

정규표현식(regex)

 

regular expression, 문자열이 특정 패턴과 일치하는지 판단하는 형식 언어

 

코드를 간소화시킬 수 있다

 

👇 import re

 

직접 짜는 것은 어렵기 때문에 이미 만들어져 검증된 정규표현식을 가져다 사용하는 것이 권장

 

(이메일 검증, 패스워드 안전성 검증, 핸드폰번호 검증 등)

 

정규표현식 앞에 r : 특정 문자들을 특수 문자로 인식하는 것을 방지해줌

 

정규표현식의 문법 설정과 예제가 있는 사이트:

 

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

glob

 

from pprint import pprint
import glob

 

출력을 예쁘게 하기 위한 pprint

 

glob 라이브러리를 사용하기 위해 import glob

 

path = glob.glob("./venv/*")
pprint(path)
#['./venv\\Include', './venv\\Lib', './venv\\pyvenv.cfg', './venv\\Scripts']

path = glob.glob("./venv/**", recursive=True)
pprint(path)
#['./venv\\',
 './venv\\Include',
 './venv\\Lib',
 './venv\\Lib\\site-packages',
 ...
]

path = glob.glob("./venv/**/*.py", recursive=True)
pprint(path)
#['./venv\\Lib\\site-packages\\autopep8.py',
 './venv\\Lib\\site-packages\\pycodestyle.py',
 './venv\\Lib\\site-packages\\pip\\__init__.py',
 ...
]

 

./venv/* : 현재 경로의 venv 폴더 내의 모든 폴더 혹은 파일을 탐색

 

./venv/**, recursive=True : 하위 모든 파일을 재귀적으로 탐색

 

./venv/**/*.py, recursive=True : 하위 모든 폴더를 재귀적으로 탐색하며 .py 확장자 파일을 탐색

 

open

 

f = open("file.txt", "w", encoding="utf-8") #열기
f.write("파이썬 파일 쓰기 테스트!\n") #쓰기
f.close() #닫기

 

"file.txt" : 파이썬에서 사용할 파일을 지정함

 

"w" : 열기 모드 - 쓰기. 파일이 없다면 새로 생성함 ("write", "read", "append")

 

(https://docs.python.org/ko/3/library/functions.html?highlight=open#open)

 

encoding : 파일의 encoding 형식을 지정함. 지정하지 않거나 잘못 지정할 경우 글자가 깨질 수 있음

 

with open

 

with 문법을 빠져나가면 파일이 자동으로 close 됨

 

파일을 열고 많이 쓰거나 읽어야 하면 open을 변수에 지정해주는 것이 좋음

 

with open("file.txt", "a", encoding="utf-8") as w:
    w.write("파이썬 내용 추가 테스트!")
    
with open("file.txt", "r", encoding="utf-8") as r:
    print(r.readlines())
    
with open("file.txt", "r", encoding="utf-8") as r:
while True:
    line = r.readline()

    if not line: #텍스트를 끝까지 읽었다면 반복문 중지
        break

    line = line.strip()
    print(line)

 

.write() : 내용 추가
    
.readlines() : list 자료형으로 한번에 읽어옴
    
.readline() : 한줄씩 읽어옴

.strip() : 줄바꿈 제거