파이썬은 순수객체 지향언어다
우리가 일반적으로 사용했던 숫자 정수형, 실수형, 문자열, 리스트, 튜플, 딕셔너리, 집합 등이 모두 객체라는 것이다.
뿐만 아니라 순수 객체 지향 언어는
사전 정의 된 모든 데이터 유형, 모든 사용자 정의 데이터 유형은 객체이다.
class User:
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = password
def say_hello(self):
print(f"안녕하세요! 저는 {self.name}입니다.")
user1 = User("강영훈", "younghoon@codeit.kr", "123456")
print(type(user1))
<class 'main.User'>
user1이 class User안에 현재 실행되고 있는 특수 메소드 main에서 생긴 객체라는 뜻이다.
print(type(2))
print(type("string"))
print(type([]))
print(type({}))
print(type(()))
#결과값
<class 'int'>
<class 'str'>
<class 'list'>
<class 'dict'>
<class 'tuple'>
모두 클래스 이름이다.
상황에 따라 달라지는 타입이 있다.
mutable_object = [1,2,3]
immutable_object = (1,2,3)
mutable_object[0] = 4
print(mutable_object)
#결과값 [4,2,3]
mutable_object = [1, 2, 3]
immutable_object = (1, 2, 3)
immutable_object[0] = 4
print(immutable_object)
#결과 TypeError: 'tuple' object does not support item assignment
tuple_x = (1, 4)
tuple_x = (3, 4, 6)
print(tuple_x)
이런 식으로 객체를 바꿔는게 아니라 새로 생성해주면 결과값 (3,4,6)으로 잘 나온다.
# 절차 지향 프로그래밍
# 반복적으로 사용하는 코드를 함수로 정의한다
def print_person_info(person_name, person_age, person_gender):
# 사람의 이름, 나이, 성별을 파라미터로 받으면 받은 정보를 이해할 수 있는 문자열로 출력해주는 함수
print("사람 한 명을 소개합니다")
print("{}님은 {}살이고 {}입니다".format(person_name, person_age, person_gender))
def is_underage(person_age):
# 사람의 나이를 파라미터로 받아서 미성년자인지를 리턴해주는 함수
return person_age < 20
# 영훈이의 정보
young_name = "영훈"
young_age = 10
young_gender = "남자"
# 윤수의 정보
yoonsoo_name = "윤수"
yoonsoo_age = 20
yoonsoo_gender = "남자"
# 영훈/윤수 정보 출력
print_person_info(young_name, young_age, young_gender)
print_person_info(yoonsoo_name, yoonsoo_age, yoonsoo_gender)
# 영훈/윤수가 미성년자인지 출력
print(is_underage(young_age))
print(is_underage(yoonsoo_age))
# 객체 지향 프로그래밍
# 속성과 행동을 갖는 객체들이 행동을 하는 방식으로 작성한다
class Person:
# 사람을 나타내는 클래스
def __init__(self, name, age, gender):
# 사람은 이름, 나이, 성별을 속성으로 갖는다
self.name = name
self.age = age
self.gender = gender
def print_info(self):
# 자신의 정보를 출력하는 메소드
print("사람 한 명을 소개합니다")
print("{}님은 {}살이고 {}입니다".format(self.name, self.age, self.gender))
def is_underage(self):
# 사람의 나이를 파라미터로 받아서 미성년자인지를 리턴해주는 메소드
return self.age < 20
# 영훈/윤수을 나타내는 객체 생성
young = Person("영훈", 10, "남자")
yoonsoo = Person("윤수", 20, "남자")
# 영훈/윤수 정보 출력
young.print_info()
yoonsoo.print_info()
# 영훈/윤수가 미성년자인지 출력
print(young.is_underage())
print(yoonsoo.is_underage())
절차지향
객체지향
최대와 최소 값을 반환해준다.
print(max(2, 5)) # => 5
print(max(2, 7, 5)) # => 7
print(min(2, 5)) # => 2
print(min(2, 7, 5, 11, 6)) # => 2
int_list = [1, 2, 3, 4, 5]
int_tuple = (4, 3, 6, 1, 2)
int_dict = {1: "one", 2: "two", 3: "three"}
print(sum(int_list)) # => 15
print(sum(int_tuple)) # => 16
print(sum(int_dict)) # => 6
condition = True
if condition:
condition_string = "nice"
else:
condition_string = "not nice"
print(condition_string) # => nice
condition = True
condition_string = "nice" if condition else "not nice"
print(condition_string) # => nice
int_list = [1, 2, 3, 4, 5, 6]
squares = []
for x in int_list:
squares.append(x**2)
print(squares) # [1, 4, 9, 16, 25, 36]
새로운 리스트를 만드는 간편한 방법
int_list = [1, 2, 3, 4, 5, 6]
squares = [x**2 for x in int_list]
print(squares) # [1, 4, 9, 16, 25, 36]
squares = [x**2 for x in int_list]
"1".zfill(2)을 하면 "01"을 리턴
문자열을 통일감있게 예쁘게 하고 싶을 때 사용
print("1".zfill(6))
print("333".zfill(2))
print("a".zfill(8))
print("ab".zfill(8))
print("abc".zfill(8))
#결과값
000001
333
0000000a
000000ab
00000abc
모듈은 함수, 클래스, 변수를 넣은 파일로 다른 파일에서 import해 가져다 쓸 수 있다.
from 모듈의 이름 import 불러올 변수/함수/클래스 이름
모듈에 정의된 모든 것들을 사용하려면, *을 쓴다.
from 모듈명 import *
Randit과 uniform 함수는 파이썬 기본 내장 모듈 random의 함수다.
Randit() : 정한 범위 수 안에 랜덤으로 한 가지 수 출력
다음 코드 실행 시 1부터 20 사이의 정수 중 랜덤으로 한 가지 수가 출력
from random import randint
# 1 <= N <= 20를 만족하는 랜덤한 정수(난수) N을 리턴한다.
x = randint(1, 20)
print(x)
uniform(): 두 수 사이의 랜덤한 소수(난수)를 리턴하는 함수
다음을 실행하면 0과 1사이의 소수 중 랜덤으로 한 가지 수가 출력
from random import uniform
# 0 <= N <= 1을 만족하는 랜덤한 소수(난수) N을 리턴한다.
x = uniform(0, 1)
print(x)