6단원 과제: 클래스¶
이름: ____________
- 출력 예측: 소스 코드를 보고 실행 결과를 예측하여 작성하세요. 코드를 실행하기 전에 먼저 작성하세요.
- 빈칸 채우기:
______빈칸을 채워 프로그램을 완성하세요.
문제 1. self 없이 호출? (출력 예측)¶
소스 코드
class Greeter:
def __init__(self, name):
self.name = name
def greet(self):
return "Hello, " + self.name
g = Greeter("Alice")
print(g.greet())
print(Greeter.greet(g))
print(type(g))
실행 결과
①
②
③
문제 2. 인스턴스 변수 독립성 (출력 예측)¶
소스 코드
class Box:
def __init__(self, value):
self.value = value
a = Box(10)
b = Box(10)
b.value = 99
print(a.value)
print(b.value)
print(a.value == b.value)
print(a is b)
실행 결과
①
②
③
④
문제 3. 클래스 변수 함정 (출력 예측)¶
소스 코드
class Player:
score = 0
def add(self, n):
self.score += n
p1 = Player()
p2 = Player()
p1.add(10)
p2.add(5)
print(p1.score)
print(p2.score)
print(Player.score)
실행 결과
①
②
③
힌트:
self.score += n은self.score = self.score + n과 같습니다.
처음 읽을 때self.score가 어디서 오는지 생각해보세요.
문제 4. 공유 리스트 함정 (출력 예측)¶
소스 코드
class Team:
members = []
def join(self, name):
self.members.append(name)
t1 = Team()
t2 = Team()
t1.join("Alice")
t2.join("Bob")
print(t1.members)
print(t2.members)
print(t1.members is t2.members)
실행 결과
①
②
③
문제 5. __str__ 메서드 (출력 예측)¶
소스 코드
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
p = Point(3, 7)
print(p)
print(str(p))
print(repr(p))
실행 결과
①
②
③
문제 6. 상속 — super() 와 오버라이딩 (출력 예측)¶
소스 코드
class Shape:
def __init__(self, color):
self.color = color
def info(self):
return f"color={self.color}"
class Circle(Shape):
def __init__(self, color, radius):
super().__init__(color)
self.radius = radius
def info(self):
return super().info() + f", r={self.radius}"
c = Circle("red", 5)
print(c.info())
print(c.color)
print(isinstance(c, Shape))
print(isinstance(c, Circle))
실행 결과
①
②
③
④
문제 7. 이름 맹글링 (출력 예측)¶
소스 코드
class Safe:
def __init__(self, secret):
self.__secret = secret
def reveal(self):
return self.__secret
s = Safe("1234")
print(s.reveal())
print(hasattr(s, "__secret"))
print(hasattr(s, "_Safe__secret"))
실행 결과
①
②
③
문제 8. 클래스 변수 카운터 (빈칸 채우기)¶
생성된 객체 수를 추적하는 카운터를 완성하세요.
실행 예시
0
1
3
소스 코드
class Item:
______ = 0 # 클래스 변수
def __init__(self, name):
self.name = name
______.count += 1
print(Item.count)
a = Item("apple")
print(Item.count)
b = Item("banana")
c = Item("cherry")
print(______.count)
문제 9. 상속 체인 완성 (빈칸 채우기)¶
부모 생성자를 호출하고 오버라이딩을 완성하세요.
실행 예시
Animal: Buddy
Dog: Buddy (Labrador)
Buddy says: Woof!
소스 코드
class Animal:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Animal: {self.name}"
def speak(self):
return "..."
class Dog(______):
def __init__(self, name, breed):
______.__init__(name)
self.breed = breed
def ______(self):
return f"Dog: {self.name} ({self.breed})"
def speak(self):
return f"{self.name} says: Woof!"
d = Dog("Buddy", "Labrador")
print(Animal.__str__(d))
print(d)
print(d.speak())
문제 10. 은행 계좌 완성 (빈칸 채우기)¶
아래 조건을 만족하는 은행 계좌 클래스를 완성하세요.
실행 예시
잔액: 1500원
잔액 부족
잔액: 1500원
소스 코드
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.______ = balance
def deposit(self, amount):
if amount > 0:
self.balance += amount
def withdraw(self, amount):
if amount > ______:
print("잔액 부족")
else:
self.balance -= ______
def ______(self):
return f"잔액: {self.balance}원"
acc = BankAccount("홍길동", 1000)
acc.deposit(500)
print(acc)
acc.withdraw(2000)
print(acc)