자료형을 확인하는 방법에 대해 알아봅시다. 다음 코드의 실행 결과를 확인해 보세요.
type(변수명)을 이용하면 변수의 자료형을 알 수 있어요.
my_list = [1, 2, 3]
my_dict = {"풀": 800, "색연필": 3000}
my_tuple = (1, 2, 3)
number = 10
real_number = 3.141592
print(type(my_list))
print(type(my_dict))
print(type(my_tuple))
print(type(number))
print(type(real_number))
list1과 list2는 같은 값을 가지는 리스트입니다. 코드의 4번째줄에 있는것과 같이 is연산을 하면 둘이 같은 인스턴스인지를 알아볼 수 있고, 7번째줄에 있는 ==연산을 하면 둘이 같은 값을 가지는지 알아볼 수 있습니다. 다음을 실행해서 나오는 출력을 확인하고 is연산과 ==연산의 차이를 확인해 보세요.
인스턴스는 클래스에 의해 생성된 객체를 뜻합니다. 인스턴스의 클래스가 같더라도 각자 다른 값을 가질 수 있습니다.
list1 = [1, 2, 3]
list2 = [1, 2, 3]
if list1 is list1:
print("당연히 list1과 list1은 같은 인스턴스입니다.")
if list1 == list2:
print("list1과 list2의 값은 같습니다.")
if list1 is list2:
print("그리고 list1과 list2는 같은 인스턴스입니다.")
else:
print("하지만 list1과 list2는 다른 인스턴스입니다.")
다음 코드는 list1과 list2가 모두 list클래스의 인스턴스인지를 검사합니다. 코드의 빈칸을 채워넣어 정상 동작하도록 만들어 보세요.
인스턴스가 특정 클래스의 인스턴스인지 알아보는 방법으로 isinstance를 이용할 수 있습니다.
아래의 코드를 참고하여 문제를 해결해 보세요.
list1 = list("hello")
list2 = list("hello")
isinstance(list1, list) #True
isinstance(list2, list) #True
클래스 선언
class Human( ):
'''사람'''
인스턴스 생성
person1 = Human( )
person2 = Human( )
다음 코드는 클래스 Car의 인스턴스로 taxi를 만들고 있습니다. taxi.name을 "택시"라고 저장해 보세요.
클래스를 선언하고 인스턴스를 생성하려면 다음과 같은 방법을 사용할 수 있습니다.
class Human():
'''사람'''
person1 = Human()
person2 = Human()
person1.language = '한국어'
person2.language = 'English'
모델링(modeling)
메소드(Method)
class Human( ):
'''인간'''
def create( name, weight ): # 다음 강의에서 자세히 설명
person = Human()
person.name = name
person.weight = weight
return person
def eat( self ):
self.weight += 0.1
print("{}가 먹어서 {}kg이 되었습니다".format(self.name, self.weight))
def walk( self ):
self.weight -= 0.1
print("{}가 걸어서 {}kg이 되었습니다".format(self.name, self.weight))
person = Human.create("철수", 60.5)
person.eat()
self
taxi는 Car클래스의 인스턴스로 "택시"라는 이름을 가지고 있습니다.taxi.run()을 호출할 수 있도록 Car클래스 밖에 정의되어 있는 run함수를 클래스 안으로 가져오세요. 가져온 다음에는 run의 매개변수인 car를 self로 변경하세요.
메소드는 클래스에 포함되어 있는 함수를 가리킵니다.
함수를 클래스 안으로 가져오려면 그 함수를 클래스 안에 넣어 들여쓰고, 메소드의 첫 번째 인자를 self로 변경해야 합니다.
class Human( ):
'''인간'''
def create( name, weight ): # 다음 강의에서 자세히 설명
person = Human()
person.name = name
person.weight = weight
return person
def eat( self ):
self.weight += 0.1
print("{}가 먹어서 {}kg이 되었습니다".format(self.name, self.weight))
초기화 함수, 문자열화 함수
class Human( ):
'''인간'''
def __init__( self, name, weight ):
'''초기화 함수'''
self.name = name
self.weight = weight
def __str__( self )
'''문자열화 함수
return "{} ( 몸무게 {}kg )".format( self.name, self.weight )
person = Human( "사람", 60.5 ) # 초기화 함수 사용
print( person ) # 문자열화 함수 사용
다음 코드는 완성된 Human클래스입니다. 19번째 줄에서 person을 Human클래스의 인스턴스로 만들고, person이 2번 걷고 1번 먹도록 만들어 보세요.
class Human( ):
'''인간'''
def __init__( self, name, weight ):
'''초기화 함수'''
self.name = name
self.weight = weight
def __str__( self )
'''문자열화 함수'''
return "{} ( 몸무게 {}kg )".format( self.name, self.weight )
person = Human( "사람", 60.5 ) # 초기화 함수 사용
print( person ) # 문자열화 함수 사용
class Human():
def __init__(self, name, weight):
self.name = name
self.weight = weight
def __str__(self):
return "{} (몸무게 {}kg)".format(self.name, self.weight)
def eat(self):
self.weight += 0.1
print("{}가 먹어서 {}kg이 되었습니다.".format(self.name, self.weight))
def walk(self):
self.weight -= 0.1
print("{}가 걸어서 {}kg이 되었습니다.".format(self.name, self.weight))
# 아래에서 person을 이름과 몸무게를 가지는 Human클래스의 인스턴스로 만들어보세요.
person =
print(person)
상속하는 클래스를 부모 클래스
상속받는 클래스를 자식 클래스
자식 클래스가 부모 클래스의 내용을 가져다 쓸 수 있는 것
class Animal( ):
def walk( self ):
print( "걷는다" )
def eat( self ):
print( "먹는다" )
class Human( Animal ):
def wave( self ):
print( "손을 흔든다" )
class Dog( Animal ):
def wag( self ):
print( "꼬리를 흔든다" )
Car클래스를 상속받는 Truck이라는 클래스를 만들고, load라는 메소드를 만들어 보세요. load메소드에서는 "짐을 실었습니다."라고 출력하면 됩니다.
Car클래스를 부모 클래스, Truck클래스를 자식 클래스로 만들어야 합니다.
class Animal():
def walk(self):
print("걷는다")
class Human(Animal):
def wave(self):
print("손을 흔든다")
class Animal( ):
def greet( self ):
print( "인사한다" )
class Human( Animal ):
def greet( self ):
print( "손을 흔든다" )
class Dog( Animal ):
def greet( self ):
print( "꼬리를 흔든다" )
Truck클래스는 Car클래스의 자식클래스입니다. Car클래스에 정의된 run을 Truck클래스에서 오버라이드해서 run을 실행하면 "트럭이 달립니다."라고 출력되도록 만들어 보세요.
오버라이드란 같은 이름을 가진 메소드를 엎어 쓴다는 의미입니다.
class Animal( ):
def greet( self ):
print( "인사한다" )
class Human( Animal ):
def greet( self ):
print( "손을 흔든다" )
class Dog( Animal ):
def greet( self ):
print( "꼬리를 흔든다" )
super()
자식클래스에서 부모클래스의 내용을 사용하고 싶은 경우
super().부모클래스내용
class Animal( ):
def __init__( self, name ):
self.name = name
class Human( Animal ):
def __init__( self, name, hand ):
super().__init__( name ) # 부모클래스의 __init__ 메소드 호출
self.hand = hand
person = Human( "사람", "오른손" )
Truck클래스는 Car클래스의 상속을 받는 자식클래스입니다. Truck클래스의 __init__에서 name, capacity(몇톤트럭인지)를 입력받아 인스턴스의 값으로 저장하세요. (단, Truck클래스의 __init__에서 name을 설정하는 부분은 super()를 이용해서 처리하도록 만드세요.)
class Animal( ):
def __init__( self, name ):
self.name = name
class Human( Animal ):
def __init__( self, name, hand ):
super().__init__( name ) # 부모클래스의 __init__ 메소드 호출
self.hand = hand
person = Human( "사람", "오른손" )
예외 정의
try:
sign_up( )
except BadUserName:
print( "이름으로 사용할 수 없는 입력" )
except PasswordNotMatched:
print( "입력한 패스워드 불일치")
다음 코드는 문구점 3곳을 검사하면서 풀이 있으면 문구점의 이름과 가격을 출력하고 MyException을 raise해서 즉시 for in문 전체를 종료합니다. 코드의 2번째 줄에 Exception클래스를 상속받는 MyException이라는 예외 클래스를 만들어 보세요.
-코드
```python
class BadUserName(Exception): # 이름에 대한 예외처리
class PasswordNotMatched(Exception): # 패스워드에 대한 예외처리
try:
sign_up( )
except BadUserName:
print( "이름으로 사용할 수 없는 입력" )
except PasswordNotMatched:
print( "입력한 패스워드 불일치")
예1 [ i*i for i in range(1,11) ] # [ 계산식 for문 ]
예2 [ i*i for i in range(1,11) if i % 2 == 0 ] # [ 계산식 for문 조건문 ]
예3 [ ( x, y ) for x in range(15) for y in range(15) ] # [ 계산식 for문 for문 ]
list comprehension을 이용해서 list1이 1부터 100 사이의 8의 배수를 가지도록 만들어 보세요.
areas1 = [ i*i for i in range(1,11) ] # [ 계산식 for문 ]
areas2 = [ i*i for i in range(1,11) if i % 2 == 0] # [ 계산식 for문 조건문 ]
areas3 = [ ( x, y ) for x in range(15) for y in range(15) ] # [ 계산식 for문 for문 ]
{ "{}번".format(number):name for number, name in enumerate(students) } # [ 형식 for문 ]
{student:score for student, score in zip(students, scores)}
product_list에는 상품의 목록이 들어 있고, price_list에는 각 상품의 가격이 순서대로 들어있습니다. 딕셔너리 컴프리헨션을 이용해서 product_dict를 상품의 이름을 키로 가지고, 가격을 값으로 가지는 딕셔너리로 만들어보세요.
students = ["태연", "진우", "정현", "하늘", "성진"]
{"{}번".format(number):name for number, name in enumerate(students)}
# {'2번': '정현', '0번': '태연', '1번': '진우', '4번': '성진', '3번': '하늘'}
christmas_2016이 2016년 12월25일을 값으로 가지는 datetime클래스의 인스턴스가 되도록 만들어 보세요.
datetime은 날짜와 시간을 사용 할 수 있게 해주는 라이브러리입니다.
원하는 날짜와 시간으로 인스턴스를 만들기 위해서는 아래의 예와 같이 사용합니다.
start_time = datetime.datetime(2016, 2, 1)
import datetime
christmas_2016 =
print(christmas_2016)
hundred_after가 지금으로부터 100일 후, 9시 정각을 값으로 가지는 datetime클래스의 인스턴스가 되도록 만들어 보세요. (단, 정각의 기준은 초 단위까지만 맞으면 됩니다.)
addtime = datetime.timedelta(days = 10)
datetime.datetime.now() + addtime # 10일 후
datetime.datetime.now() - addtime # 10일 전
thedate = datetime.datetime.now().replace(hour = 10, minute=0, second = 0)
+ datetime.timedelta(days = 3) # 3일 후 10시 정각