Python/Python_Advanced

[파이썬40작] 00. 파이썬 문법

묘걍 2024. 1. 20. 19:45

👉🏻 print문

print("hello")
print("hello")
  • 큰 따옴표 혹은 작은 따옴표로 감싼다
  • 둘 다 같은 결과를 낸다

print('hello "안녕하세요"')
print("hello '안녕하세요'")
  • 따옴표를 출력하고 싶다면 작은 따옴표 안에는 큰 따옴표를, 큰 따옴표 안에는 작은 따옴표를 입력한다

print("안녕", "하세요", "반갑습니다")
print("안녕" + "하세요" + "반갑습니다")
  • 여러개의 문자열을 이어주고 싶다면 ,(콤마) 혹은 + 로 연결시킬 수 있다
  • 콤마의 경우 자동으로 문자열 사이를 띄워준다

print(
    """안녕하세요
      오늘은 날씨가 좋네요"""
)
print(
    '''안녕하세요
      오늘은 날씨가 좋네요'''
)

print("안녕하세요" \
    "오늘은 날씨가 좋네요")
  • 여러 줄을 입력하고 싶다면 큰 따옴표나 작은 따옴표 3개를 이어 입력하거나
  • \(역슬래시)를 이용해서 라인을 구분할 수 있다

a = 123
b = "안녕하세요"
print("a값:{} b값:{}".format(a, b))

a = 123
b = "안녕하세요"
print(f"a값:{a} b값:{b}")
  • 변수에 넣은 값을 받아 출력하고 싶다면
  • .format(변수명)
  • f" {변수명} " 을 사용할 수 있다

 

 

👉🏻 input

input()
  • 기본적으로 input()만 해도 값을 입력받을 수 있다
input('값을 입력해주세요:')
  • ()안에 문자를 입력하면 사용자에게 보여진다
a = input("첫 번재 문자열 입력:")
b = input("두 번째 문자열 입력:")
print(a+b)
  • 문자열을 입력 받아 변수에 할당할 수 있다

👉🏻 변수

a = 10
b = 10
c = a+b
print(c)
  • =을 기준으로 왼쪽 값이 오른쪽의 값을 가리킨다
    • 고 설명하셨는데 오른쪽 값을 왼쪽에 넣어준다는 설명이 더 확실한 듯

a = 10
b = 10
c = a + b
d = '10'
print(c + d)
  • c는 int형으로 숫자고, d는 문자열이다
  • 문자와 숫자를 더할 수 없다

print(c + int(d))

print(str(c) + d)
  • d를 c와 같은 int형으로 바꾸던지
  • c를 d와 같은 str형으로 바꿔야 연산이 된다
  • 문자열 + 연산의 경우 그냥 옆에 붙인다

🧩 float

e = 3.14
f = 10
print(e + f)
  • 같은 숫자형이기 때문에 int와 float을 더해도 에러가 나지 않는다
  • 결과는 자동으로 float으로 출력된다

a = 10
b = 10
c = float(a) + float(b)
print(c)
  • int형을 float형으로 바꿔 더해봤다
  • 당연히 결과는 float형으로 나온다

🧩 Boolean

a_bool = True
b_bool = False
a_int = 1
b_int = 0
print(a_bool)
print(b_bool)
print(type(a_bool))
print(type(b_bool))
print(a_int)
print(b_int)
print(type(a_int))
print(type(b_int))
  • type()함수를 통해 해당 변수의 자료형을 출력할 수 있다
  • True와 False는 bool형이다

🧩 list

a_list = [1,2,3,4,5]
print(a_list)
print(a_list[0])
print(a_list[1])
  • 리스트는 여러 개의 데이터를 하나의 변수로 묶어 표현할 수 있는 자료형이다
  • 리스트 생성을 위해 [](대괄호)로 데이터를 묵는다
  • 시작은 0번부터

✅ 슬라이싱

print(a_list[:2])
print(a_list[2:])
  • :를 통해 원하는 범위의 원소를 가져올 수 있다
  • 앞 부분을 비우면 처음부터
  • 뒷 부분을 비우면 마지막까지

✅ 추가

b_list = []
b_list.append(1)
b_list.append(2)
b_list.append(3)
print(b_list)
  • append()를 통해 리스트에 원소를 집어 넣을 수 있다
  • 리스트의 가장 오른쪽에 추가된다

 

c_list = [1, 3.14,"hello", [1,2,3]]
print(c_list)
print(c_list[1:3])
  • 다양한 형태의 데이터가 들어갈 수 있다

✅ 데이터 변경

d_list = [1,2,3,4,5]
print(d_list)
d_list[0] = 5
print(d_list)
  • 단순히 = 를 이용하여 해당 위치의 값을 변경할 수 있다

🧩 튜플

a_tuple = (1,2,3,4,5)
print(a_tuple)
  • 리스트와 매우 비슷하나
  • 튜플의 데이터는 변경할 수 없다는 특징
  • ()(소괄호)로 묶는다

✅ 데이터 변경?

a_tuple[0] = 5
  • 변경 불가

 

🧩 딕셔너리

a_dic = {"a": 1, "b": 2, "c": 3}
print(a_dic)
print(a_dic["a"])
print(a_dic["b"])
print(a_dic["c"])
  • 사전
  • key와 value 쌍으로 구성
  • {}(중괄호)로 묶음
  • key값을 이용해서 value를 찾음

b_dic = {1:"a", "b":[1, 2, 3], "c":3}
print(b_dic[1])
print(b_dic['b'])
print(b_dic['c'])
  • 딕셔너리의 key값은 문자형과 숫자형 모두 가능하다
  • value값은 다양한 자료형을 넣을 수 있다

✅ 추가

b_dic['d'] = 4
print(b_dic)
  • 새로운 key값과 value를 입력하여 딕셔너리에 데이터를 추가할 수 있다

🧩 집합

a_set = set([1,2,3,4])
print(a_set)
  • 중복이 없는 자료형
  • set() 안에 []리스트 형태로 데이터를 넣는담

✅ 중복 제거

b_set = set([1,1,2,2,3,3,4,5,6])
print(b_set)
  • 같은 원소를 집어 넣어도 중복을 제거하고 하나씩만 출력함

c_set = set("python40s")
print(c_set)
  • 순서가 없다
  • 정렬되지 않고 무작위로 값이 섞여 있다

👉🏻 사칙 연산

print("더하기:", 10+20)
print("빼기:", 10-20)
print("곱하기:", 10*20)
print("나누기:", 10/20)
  • 곱하기는 영어 소문자와 혼동되지 않도록 *

print("c**2:", 10**2)
print("c**3:", 10**3)
print("c**4:", 10**4)
  • 거듭제곱

✅ 몫과 나머지

print("몫:", 40//6)
print("나머지:", 40%6)

👉🏻 논리 연산

🧩 OR

print(0 or 0)
print(0 or 1)
print(1 or 0)
print(1 or 1)
print(False or False)
print(False or True)
print(True or False)
print(True or True)
  • or 연산은 값이 하나라도 참인 경우에 참인 연산이다
  • 0, 1은 int(숫자)형이고
  • True, False는 Bool형이다

🧩 AND

print(0 and 0)
print(0 and 1)
print(1 and 0)
print(1 and 1)
print(False and False)
print(False and True)
print(True and False)
print(True and True)
  • and 연산은 모든 값이 참이어야 참인 연산이다
  • 모든 값이 1 이상이거나 True일 때만 참인 연산이다

🧩 NOT

print(not 0)
print(not 1)
print(not False)
print(not True)
  • not은 자신의 상태를 반전시킨다
  • True, False 두 상태만 가진다

👉🏻 비교 연산

print(10 == 10)
print(10 >= 10)
print(10 <= 10)
print(10 < 5)
print(10 > 5)
print(10 != 10)

🧩 in

  • in은 리스트나 문자열에서 포함된 값을 비교한다
a_list = ['a', 2, 'hello', 3]
print('a' in a_list)
print(1 in a_list)
print('hello' in a_list)
print(3 in a_list)
  • 리스트에 값이 포함되어있는지 확인하는 것

a_str = "hello python"
print('python' in a_str)
print('py' in a_str)
print('40' in a_str)
  • 문자열에서 문자가 포함되어 있는지 확인하는 것

👉🏻 조건문

  • 조건에 따라 코드를 실행하거나 실행하지 않게 만들 수 있다
a = 1
b = 1
if a == b:
    print("두 개의 값은 같습니다")
if a != b:
    print("두 개의 값은 같지 않습니다")

a = 1
b = 2
if a == b:
    print("두 개의 값은 같습니다")
if a != b:
    print("두 개의 값은 같지 않습니다")

🧩 if ~ elif ~ else

a = 1
b = 2
if a > b:
    print("a의 값이 더 큽니다")
elif a < b:
    print("b의 값이 더 큽니다")
else:
    print("두 개의 값은 같습니다")
  • 쌍으로 동작하며 위에서부터 조건을 비교하다가 만족하는 조건이 실행되면 다음의 조건은 실행되지 않고 건너 뛴다

🧩 연산자와 조건문

a = 1
b = 1
if a >= b:
    print("a 값이 더 크거나 같습니다")
if a <= b:
    print("a 값이 더 작거나 같습니다")

a = 1
b = 1
c = 2
d = 2
if a == b and c == d:
    print("두 조건 모두 만족")
if a == b or c == d:
    print("두 조건 중 하나라도 만족하면")
  • a == b and c == d 도 만족하고 a == b or c == d도 만족해서 두 문장 다 나온다

a_str = 'hello python'
if a_str == 'hello python':
    print("hello python 문자열이 같습니다")
if a_str == "hi python":
    print("hi python 문자열이 같습니다")
if "hello" in a_str:
    print("hello가 포함되어 있습니다")
if "hello" not in a_str:
    print("hello가 포함되어 있지 않습니다")
if "hi" not in a_str:
    print("hi가 포함되어 있지 않습니다")

a_list = ['안녕', 1, 2, '파이썬']
if "안녕" in a_list:
    print("a_list에 안녕이 포함되어 있습니다")
if 2 in a_list:
    print("a_list에 숫자 2가 포함되어 있습니다")

a_list = ["안녕", 1, 2, "파이썬"]
if "안녕" not in a_list:
    print("a_list에 안녕 이 포함되어 있지 않습니다")
if 5 not in a_list:
    print("a_list에 숫자 5는 없습니다")

 

👉🏻 반복문

  • 어떠한 연산 혹은 기능을 반복적으로 실행해야할 대 사용하는 구문

🧩 for문

  • 반복되는 부분이나 범위를 구체적으로 지정해서 실행
for i in range(7):
    print(i)

for i in range(5, 10):
    print(i)
  • range의 범위를 지정할 수 있다
  • (시작, 끝)으로 입력하고 끝은 끝으로 입력한 숫자 -1까지다

for i in range(10, 5, -1):
    print(i)
  • range함수의 3번재 인자에 -1을 입력하면 역순으로 출력이 가능하다

a_list = [1,2,3,4,5,'안녕', '하세요']
for i in a_list:
    print(i)

a_str = "hello python"
for i in a_str:
    print(i)
  • 문자열 길이 만큼 반복해서 문자 하나하나를 가져옴

✅ enumerate

name_list = ["홍길동", "장다인", "김철수"]
age_list = [500, 5, 12]
for i, k in enumerate(name_list):
    print("i=", i, end=' ')
    print("k=", k)
  • 리스트에서 위치와 값을 가져올 수 있다
  • i는 리스트의 위치
  • k는 리스트의 값
  • end=" "는 " "에 빈 값이 들어갔기 때문에 종료 문자를 넣지 않겠다는 뜻
    • " "에 값을 넣어주면 종료 문자가 들어감
    • end=" "을 넣어주지 않으면 기본적으로 종료 문자는 줄바꿈이 들어간다. 줄바꿈을 하지 않기 위해서 end=" "을 사용

name_list = ["홍길동", "장다인", "김철수"]
age_list = [500, 5, 12]
for i, k in enumerate(name_list):
    print(k, end=" ")
    print(age_list[i])
for i, k in enumerate(name_list):
    print(name_list[i], end=" ")
    print(age_list[i])
  • 이름 리스트와 나이 리스트를 하나의 for문을 이용해 출력해보기
  • enumerate를 이용해 name_list의 길이(i)와 내용(k)을 가져옴

for i in range(len(name_list)):
    print(name_list[i], end=" ")
    print(age_list[i])
  • 위의 방법이 헷갈린다면 이 코드로

✅ .append

test_list = [i for i in range(10)]
print(test_list)

test2_list = []
for i in range(10):
    test2_list.append(i)
print(test2_list)
  • for문을 이용하여 리스트에 값을 쉽게 넣을 수 있다

✅ 리스트 초기화

test_list = [i * 5 for i in range(10)]
print(test_list)
test2_list = [0 for i in range(10)]
print(test2_list)

 

 

🧩 while 문

  • 참과 거짓을 기준으로 조건이 거짓이 되기 전까지 무한 반복적으로 실행
  • 조건이 참일 때 계속 반복
    • True 혹은 1 이상
a = 0
while a < 5:
    print(a)
    a = a + 1

a = 0
while True:
    print(a)
    a = a + 1
    if a >= 5:
        break
  • a가 5보다 커지면 break를 만나 while문을 탈출한다

👉🏻 오류 및 예외처리

  • 프로그램 언어를 사용하는 이유는 컴퓨터가 알아 들을 수 있는 기계어인 0과 1로 바꿔주는 역할
  • 파이썬 언어는 파이썬 프로그램 언어를 인터프리터라고 하는 명령어 해석기를 통해 한 줄 한 줄 기계어로 번역하여 컴퓨터에게 전달
  • 한 줄 한 줄 동작하기 때문에 에러가 발생하는 프로그램 이전까지는 잘 동작하다가 에러를 만나면 에러를 출력하고 종료한다
  • 프로그램에서 에러가 발생할만한 코드에 예외처리를 하는 방법
asdfasdc
  • 아무 의미가 없는 코드를 입력하면 에러가 발생한다
  • NameError - 선언되지 않아 에러가 발생함

🧩 try: except:

try:
    asdfasdc
except:
    print("에러발생")
  • try: 문에 에러가 발생하면 except:문을 실행한다

🧩 pass

try:
    asdfasdc
except:
    pass
print("에러를 무시")
  • pass를 이용해 아무것도 하지 않고 넘어가기

🧩 Exception as e

try:
    asdfasdc
except Exception as e:
    print("에러 발생 원인:", e)
  • e를 출력해보면 에러의 원인이 출력된다
  • 프로그램이 멈추지 않고 프로그램 내에서 에러의 원인을 출력한다

👉🏻 함수

  • 코드가 모여 있는 하나의 단위
def func():
    print("안녕하세요")
    print("파이썬과 40개의 작품들입니다")
func()
  • 함수 안에 있다는 것은 들여쓰기를 통해 표현

 

def func():
    print("안녕하세요")
    print("파이썬과 40개의 작품들입니다")
for i in range(3):
    func()

🧩 값 받기

def funcAdd(a, b):
    return a + b
c = funcAdd(1, 2)
print(c)

def funcMux(a, b):
    mux = a * b
    return mux
c = funcMux(2, 3)
print(c)

 

🧩 여러개의 값 반환하기

def funcAddMux(a, b):
    add = a + b
    mux = a * b
    return add, mux
a, b = funcAddMux(1, 3)
print(a, b)

👉🏻 클래스

  • 클래스란 프로그램의 틀이다
  • 클래스를 이용하여 틀을 만들고 그 틀대로 찍어 객체를 만들 수 있다
  • 틀을 이용하여 객체를 찍어내면 되기 때문에 객체는 틀을 찍는 대로 생성 가능하다
class Greet:
    def hello(self):
        print("hello")

    def hi(self):
        print("hi")


human1 = Greet()
human2 = Greet()
human1.hello()
human2.hi()
human2.hello()
human1.hi()
  • Greet 클래스 안에 hello함수와 hi함수가 있다
  • 클래스 안의 함수는 메서드라고 한다
  • human1 = Greet() → Greet이라는 클래스로 human1 객체를 찍어 생성했다 (human2도 마찬가지)
  • 클래스로 객체를 생성했으면 객체는 클래스에서 만든 메서드(함수)를 사용할 수 있다
  • human1.hello()를 이용해 hello메서드(함수)를 실행했다
  • 하나의 클래스를 만든 후 객체를 생성하여 동작

🧩 __init__

  • 클래스를 생성할 때 바로 실행된다
class Student():
    def __init__(self, name, age, like):
        self.name = name
        self.age = age
        self.like = like
    def studentInfo(self):
        print(f"이름:{self.name}, 나이:{self.age}, 좋아하는 것:{self.like}")
김철수 = Student("김철수", 17, "축구")
장다인 = Student("장다인", 5, "헬로카봇")
김철수.studentInfo()
장다인.studentInfo()
  • Student()클래스 생성
  • __init__메서드는 객체를 만들 때 자동으로 동작하는 메서드
  • name, age, like를 입력받는다
  • self는 자기 자신으로 클래스 메서드(함수)를 만들 때 꼭 붙여준다
  • self.name, self.age, self.like는 Student() 클래스에서 사용하는 클래스 변수로 클래스 내에 다른 메서드(함수)에서 사용 가능하다
  • 김철수 = Student("김철수", 17, "축구) → 김철수 객체를 만들고 이름, 나이, 좋아하는 것을 입력
  • 김철수.studentInfo() → 김철수의 정보를 출력

🧩 클래스 상속

  • 상속 받은 메서드(함수)를 사용할 때는 super()를 사용한다
  • super()는 상위라는 뜻이 있다
class Mother():
    def characteristic(self):
        print("키가 크다")
        print("공부를 잘한다")
class Daughter(Mother):
    def characteristic(self):
        super().characteristic()
        print("운동을 잘한다")
엄마 = Mother()
딸 = Daughter()
print("엄마는")
엄마.characteristic()
print("딸은")
딸.characteristic()
  • Mother() 클래스의 characteristic(self)는 "키가 크다", "공부를 잘한다"를 출력한다
  • Daughter(Mother)클래스는 Mother 클래스를 상속받았고 Daughter()클래스의 charateristic(self)은 super().characteristic()로부터 상속 받은 "키가 크다", "공부를 잘한다"와 자기 자신이 잘하는 "운동을 잘한다"를 출력한다
  • 딸은 엄마에게 '키가 크다'와 '공부를 잘한다'를 상속받고 자기 자신이 잘하는 '운동을 잘한다'도 함께 출력

class Mother:
    def __init__(self):
        print("키가 크다")
        print("공부를 잘한다")


class Daughter(Mother):
    def __init__(self):
        super().__init__()
        print("운동을 잘한다")


print("엄마는")
엄마 = Mother()
print("딸은")
딸 = Daughter()
  • __init__을 이용해 객체를 생성하자마자 출력하기
  • super().__init__()은 상속 받은 클래스의 __init__을 실행한다

🧩 추가 설명

✅ 클래스란?

파이썬 클래스(Class)는 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 코드를 논리적으로 구조화하고 재사용성을 높이기 위한 도구입니다. 클래스는 데이터와 해당 데이터를 다루는 메서드(함수)들을 묶어 놓은 틀이라고 생각할 수 있습니다. 다른 언어에서는 "클래스"를 "객체"의 설계도라고도 부릅니다. 클래스는 코드를 구조화하고 재사용성을 높이기 위한 강력한 도구이며, 이를 이해하면 프로그래밍에서 더 나은 모듈화와 유지보수성을 얻을 수 있습니다.

여러 가지 특성과 행동을 갖춘 객체를 만들기 위한 설계 도면이라고 생각할 수 있습니다. 여기에서는 자동차라는 비유를 사용해 보겠습니다.

클래스의 정의

클래스는 자동차 공장의 설계 도면과 같습니다. 이 도면에는 자동차가 가져야 하는 특성(속성)과 할 수 있는 행동(메서드)들이 명시되어 있습니다.

class Car:
    def __init__(self, model, year):
        self.model = model
        self.year = year

    def start_engine(self):
        print(f"{self.year}년식 {self.model} 자동차의 엔진이 작동합니다.")

    def drive(self):
        print(f"{self.model} 자동차가 달립니다.")

객체 생성

클래스는 설계 도면일 뿐, 실제로 사용할 자동차를 만들려면 설계 도면을 바탕으로 실체를 찍어내야 합니다. 이렇게 만들어진 것이 객체입니다.

my_car = Car(model="Sedan", year=2022)

속성과 메서드 사용

객체는 설계 도면에 따라 속성과 메서드를 가지고 있습니다. 속성은 자동차의 특성(모델, 연식)이고, 메서드는 자동차가 할 수 있는 행동(시동 걸기, 주행)입니다.

my_car.start_engine()  # 출력: 2022년식 Sedan 자동차의 엔진이 작동합니다.
my_car.drive()        # 출력: Sedan 자동차가 달립니다.

비유적으로 말하면, 클래스는 자동차의 설계 도면이며, 객체는 실제로 만들어진 자동차입니다. 설계 도면에는 어떤 특성을 가져야 하는지와 어떤 행동을 할 수 있는지에 대한 정보가 담겨 있습니다. 객체를 생성하면 그 설계 도면을 기반으로 실제 자동차를 만들어내고, 그 자동차는 설계 도면에 따라 움직이고 동작합니다.

✅ self(1)

self는 파이썬 클래스 내에서 사용되는 특별한 변수로, 현재 인스턴스(instance)를 나타냅니다. 클래스로부터 생성된 객체(인스턴스)는 각자 고유한 특성을 가지고 있어야 하는데, 이 특성을 나타내기 위해 self가 사용됩니다.

간단한 예시로 설명해보겠습니다. 아래는 자동차를 나타내는 클래스입니다.

class Car:
    def __init__(self, model, year):
        self.model = model
        self.year = year

    def display_info(self):
        print(f"{self.year}년식 {self.model} 자동차입니다.")

여기에서 self는 현재 인스턴스를 가리키는데, __init__ 메서드에서 사용된 것을 보면 이해가 빠를 것입니다.

__init__ 메서드:

  • __init__ 메서드는 클래스가 인스턴스화될 때 자동으로 호출되는 특별한 메서드입니다.
  • self는 현재 생성되고 있는 인스턴스를 나타냅니다. 예를 들어, Car(model="Sedan", year=2022)를 호출하면 self는 이 새로운 Sedan 자동차를 가리키게 됩니다.
  • self.model과 self.year은 해당 인스턴스의 속성으로 설정되어, 각각 Sedan과 2022와 같은 값을 갖습니다.
my_car = Car(model="Sedan", year=2022)

display_info 메서드:

  • display_info 메서드에서도 self를 사용합니다. 이 메서드는 해당 자동차의 정보를 출력하는 역할을 합니다.
  • self.year와 self.model을 사용하여 현재 인스턴스의 속성 값을 참조합니다.
my_car.display_info()  # 출력: 2022년식 Sedan 자동차입니다.

 

self는 인스턴스의 속성과 메서드를 구분짓기 위한 용도로 사용됩니다. 이를 통해 클래스의 각 인스턴스는 자신만의 데이터를 가질 수 있고, 메서드는 해당 인스턴스의 데이터에 접근하여 작업을 수행할 수 있습니다. 이렇게 함으로써 여러 개의 객체를 각각 독립적으로 다룰 수 있게 되며, 객체 지향 프로그래밍의 핵심인 캡슐화와 유연성을 실현할 수 있습니다.

✅ self(2)

self를 인자로 받는 이유는 파이썬에서 메서드가 호출될 때 해당 메서드가 속한 인스턴스에 대한 정보를 전달하기 위해서입니다.

파이썬에서 클래스의 메서드는 항상 첫 번째 매개변수로 self를 가져야 합니다. 이는 메서드가 호출된 인스턴스를 명시적으로 받아들이게 되어 해당 인스턴스의 속성에 접근하거나 수정할 수 있게 됩니다.

예를 들어, 다음과 같은 클래스가 있다고 가정해봅시다:

class MyClass:
    def __init__(self, value):
        self.value = value

    def display_value(self):
        print(self.value)

여기에서 __init__ 메서드와 display_value 메서드는 모두 self를 첫 번째 매개변수로 가지고 있습니다. 이렇게 함으로써 객체를 생성하고 그 객체의 메서드를 호출할 때, 파이썬은 해당 객체를 메서드에 전달합니다.

obj = MyClass(value=42)
obj.display_value()  # 출력: 42

이때, obj.display_value()가 호출되면 파이썬은 내부적으로 MyClass.display_value(obj)와 같이 호출합니다. 여기서 obj가 self로 전달되어 display_value 메서드 내에서 self.value와 같이 해당 객체의 속성에 접근할 수 있게 됩니다.

간단히 말해, self는 현재 인스턴스를 가리키며, 메서드가 호출될 때 파이썬이 자동으로 전달해주는 특별한 매개변수입니다. 이를 통해 클래스의 메서드는 인스턴스에 속한 데이터를 조작하거나 인스턴스의 상태를 변경할 수 있습니다.

✅ __init__

__init__은 파이썬 클래스에서 특별한 역할을 하는 메서드로, 인스턴스가 생성될 때 자동으로 호출되는 초기화 메서드입니다. __init__은 "initialize"의 약자로, 객체의 초기 상태를 설정하거나 속성을 초기화하는데 사용됩니다.

간단한 클래스를 통해 __init__의 역할을 설명해보겠습니다:

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

    def bark(self):
        print(f"{self.name}가 멍멍 짖습니다.")

여기서 __init__ 메서드는 두 개의 매개변수(self, name, age)를 가지고 있습니다.

self:

  • self는 현재 생성되는 인스턴스를 가리키는 특별한 변수입니다. 이를 통해 다양한 인스턴스들은 각각 독립적인 속성을 가질 수 있습니다.

name과 age:

  • 이 두 매개변수는 사용자가 객체를 생성할 때 제공하는 정보입니다.
  • self.name과 self.age는 해당 인스턴스의 속성으로 설정되어, 각 인스턴스마다 다른 이름과 나이를 가지게 됩니다.
my_dog = Dog(name="Buddy", age=3)

 

위 코드에서 __init__ 메서드는 my_dog라는 인스턴스가 생성될 때 호출되며, name에 "Buddy", age에 3이라는 값이 전달됩니다. 이로써 my_dog 객체는 초기화될 때 고유한 이름과 나이를 갖게 됩니다.

 

__init__ 메서드는 마치 자동차 공장에서 생산된 자동차의 초기 설정을 담당하는 작업장과 비슷합니다. 자동차가 만들어질 때마다 해당 작업장에서 초기에 필요한 작업들을 수행하여 각 자동차가 자신만의 특성을 가지도록 합니다. 이 작업장이 __init__ 메서드 역할을 하며, 각 자동차가 만들어질 때 자동으로 호출되어 초기화 작업을 수행합니다.

즉, __init__ 메서드는 객체의 생성과 동시에 호출되어 객체를 초기화하는 역할을 합니다. 객체가 생성될 때마다 호출되므로, 각 객체는 자신만의 초기 상태를 가지게 됩니다.

 

 

👉🏻 주석

# 주석입니다
# 사용자 설명 코드입니다
print("hello")  # 코드의 끝에 사용할 수 있습니다

"""
여러 줄을 입력할 때는
쌍따옴표 3개로 시작하고
쌍따옴표 3개로 종료하면
여러 줄을 입력할 수 있습니다
"""

 

a_str = """
여러 줄의
문자열을 입력할 때도
쌍따옴표 또는 따옴표
3개를 사용할 수 있습니다
"""
print(a_str)

 

 

👉🏻 import

import random
print(random.randint(1, 100))
  • random라이브러리는 무작위 값을 반환하는 기능이 있다

import random as rd
print(rd.randint(1, 100))
  • rd라는 이름을 붙여 불러온다
  • 코드에서는 rd로 사용한다
from random import randint
print(randint(1, 100))
  • random라이브러리에서 특수한 기능만 불러오기

from random import *
print(randint(1, 100))
  • 모든 기능 불러오기

 

 

 

 

 

 

 

 

 

 

 

 

 

출처: 만들면서 배우는 파이썬과 40개의 작품들