π― Python ν΄λμ€ κΈ°λ³Έ κ°λ κ³Ό μ¬μ©λ²
β ν΄λμ€λ?
ν΄λμ€(Class)λ κ°μ²΄(Object)λ₯Ό μμ±νκΈ° μν μ²μ¬μ§(Blue Print) λλ ν νλ¦Ώμ λλ€.
μ¦, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP, Object-Oriented Programming)μμ μ¬λ¬ κ°μ κ°μ²΄λ₯Ό μμ±ν μ μλλ‘ νλ μ€κ³λ μν μ ν©λλ€.
π 1οΈβ£ ν΄λμ€μ κΈ°λ³Έ ꡬ쑰
class ν΄λμ€μ΄λ¦:
# μμ±μ (κ°μ²΄ μ΄κΈ°ν)
def __init__(self, μμ±1, μμ±2):
self.μμ±1 = μμ±1 # μΈμ€ν΄μ€ λ³μ μ μΈ
self.μμ±2 = μμ±2
# λ©μλ (ν΄λμ€ λ΄μμ μ μλ ν¨μ)
def λ©μλμ΄λ¦(self):
print(f"μμ±1: {self.μμ±1}, μμ±2: {self.μμ±2}")
β’ class ν΄λμ€μ΄λ¦ β ν΄λμ€λ₯Ό μ μνλ ν€μλ
β’ init (μμ±μ, Constructor) β κ°μ²΄κ° μμ±λ λ μ€νλλ ν¨μλ‘, μΈμ€ν΄μ€ λ³μλ₯Ό μ΄κΈ°νν¨
β’ self β νμ¬ μΈμ€ν΄μ€λ₯Ό μλ―Ένλ©°, ν΄λμ€ λ΄λΆμμ κ°μ²΄μ μμ±μ μ°Έμ‘°ν λ μ¬μ©
β’ λ©μλ (Method) β ν΄λμ€ λ΄λΆμμ μ μλ ν¨μλ‘, κ°μ²΄μ λμ(κΈ°λ₯)μ ꡬνν¨
π 2οΈβ£ ν΄λμ€ μ¬μ© μμ
β κΈ°λ³Έ ν΄λμ€ μμ
class Person:
def __init__(self, name, age): # μμ±μ
self.name = name # μΈμ€ν΄μ€ λ³μ
self.age = age
def introduce(self): # λ©μλ
print(f"μλ
νμΈμ, μ μ΄λ¦μ {self.name}μ΄κ³ , λμ΄λ {self.age}μ΄μ
λλ€.")
# κ°μ²΄(μΈμ€ν΄μ€) μμ±
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)
# λ©μλ νΈμΆ
p1.introduce()
p2.introduce()
μΆλ ₯ κ²°κ³Ό
μλ
νμΈμ, μ μ΄λ¦μ Aliceμ΄κ³ , λμ΄λ 25μ΄μ
λλ€.
μλ
νμΈμ, μ μ΄λ¦μ Bobμ΄κ³ , λμ΄λ 30μ΄μ
λλ€.
π 3οΈβ£ ν΄λμ€μ μ£Όμ κ°λ
β μΈμ€ν΄μ€ λ³μμ ν΄λμ€ λ³μ
β’ μΈμ€ν΄μ€ λ³μ β self.λ³μλͺ : κ°μ²΄λ§λ€ λ€λ₯Έ κ°μ κ°μ§
β’ ν΄λμ€ λ³μ β ν΄λμ€λͺ .λ³μλͺ : λͺ¨λ κ°μ²΄κ° 곡μ νλ λ³μ
class Dog:
species = "Canine" # ν΄λμ€ λ³μ (λͺ¨λ κ°μ²΄κ° 곡μ )
def __init__(self, name, age):
self.name = name # μΈμ€ν΄μ€ λ³μ
self.age = age
# κ°μ²΄ μμ±
dog1 = Dog("Buddy", 5)
dog2 = Dog("Charlie", 3)
# ν΄λμ€ λ³μ μ κ·Ό
print(Dog.species) # Canine
print(dog1.species) # Canine
# μΈμ€ν΄μ€ λ³μ μ κ·Ό
print(dog1.name, dog1.age) # Buddy 5
print(dog2.name, dog2.age) # Charlie 3
β λ©μλμ μ’ λ₯
μΈμ€ν΄μ€ λ©μλ (self μ¬μ©) β κ°λ³ κ°μ²΄μ λν λμμ μ μ
ν΄λμ€ λ©μλ (@classmethod μ¬μ©) β ν΄λμ€ λ³μλ₯Ό λ³κ²½ν λ μ¬μ©
μ μ λ©μλ (@staticmethod μ¬μ©) β ν΄λμ€λ μΈμ€ν΄μ€μ 무κ΄ν μΌλ° ν¨μμ²λΌ λμ
class Example:
class_variable = "ν΄λμ€ λ³μ"
def __init__(self, value):
self.instance_variable = value # μΈμ€ν΄μ€ λ³μ
def instance_method(self): # μΈμ€ν΄μ€ λ©μλ
return f"μΈμ€ν΄μ€ λ³μ κ°: {self.instance_variable}"
@classmethod
def class_method(cls): # ν΄λμ€ λ©μλ
return f"ν΄λμ€ λ³μ κ°: {cls.class_variable}"
@staticmethod
def static_method(): # μ μ λ©μλ
return "μ΄κ²μ μ μ λ©μλμ
λλ€."
# κ°μ²΄ μμ±
obj = Example("Hello")
# νΈμΆ
print(obj.instance_method()) # μΈμ€ν΄μ€ λ©μλ νΈμΆ
print(Example.class_method()) # ν΄λμ€ λ©μλ νΈμΆ
print(Example.static_method()) # μ μ λ©μλ νΈμΆ
β μμ(Inheritance)
β’ μμμ μ¬μ©νλ©΄ κΈ°μ‘΄ ν΄λμ€μ κΈ°λ₯μ κ·Έλλ‘ λ¬Όλ €λ°μ νμ₯ν μ μμ.
# λΆλͺ¨ ν΄λμ€ (Super Class)
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
return "μ리λ₯Ό λΈλ€"
# μμ ν΄λμ€ (Sub Class)
class Dog(Animal): # Animalμ μμλ°μ
def make_sound(self): # λ©μλ μ€λ²λΌμ΄λ©
return "λ©λ©!"
# κ°μ²΄ μμ±
dog = Dog("Buddy")
print(dog.name) # λΆλͺ¨ ν΄λμ€ μμ± μ¬μ©
print(dog.make_sound()) # μμ ν΄λμ€μ μ€λ²λΌμ΄λ©λ λ©μλ μ€ν
μΆλ ₯ κ²°κ³Ό
Buddy
λ©λ©!
π 4οΈβ£ ν΄λμ€ μ¬μ© μμ (μ¬ν)
β μν κ³μ’ ν΄λμ€
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
def deposit(self, amount): # μ
κΈ λ©μλ
self.balance += amount
print(f"{amount}μμ΄ μ
κΈλμμ΅λλ€. νμ¬ μμ‘: {self.balance}μ")
def withdraw(self, amount): # μΆκΈ λ©μλ
if self.balance >= amount:
self.balance -= amount
print(f"{amount}μμ΄ μΆκΈλμμ΅λλ€. νμ¬ μμ‘: {self.balance}μ")
else:
print("μμ‘μ΄ λΆμ‘±ν©λλ€!")
# κ³μ’ μμ±
account = BankAccount("Alice", 1000)
account.deposit(500) # 500μ μ
κΈ
account.withdraw(200) # 200μ μΆκΈ
account.withdraw(2000) # μμ‘ λΆμ‘±
β μλμ°¨ ν΄λμ€
class Car:
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
self.speed = 0
def accelerate(self):
self.speed += 10
print(f"{self.brand} {self.model} μλ μ¦κ°: {self.speed} km/h")
def brake(self):
self.speed = max(0, self.speed - 10)
print(f"{self.brand} {self.model} μλ κ°μ: {self.speed} km/h")
# κ°μ²΄ μμ±
my_car = Car("Tesla", "Model 3", 2022)
my_car.accelerate()
my_car.accelerate()
my_car.brake()
π― μ 리
κ°λ | μ€λͺ |
---|---|
init() | μμ±μ (κ°μ²΄κ° μμ±λ λ μ€νλλ ν¨μ) |
self | νμ¬ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ λ³μ |
μΈμ€ν΄μ€ λ³μ | κ°λ³ κ°μ²΄κ° κ°μ§λ λ³μ (self.λ³μλͺ ) |
ν΄λμ€ λ³μ | λͺ¨λ κ°μ²΄κ° 곡μ νλ λ³μ (ν΄λμ€λͺ .λ³μλͺ ) |
μΈμ€ν΄μ€ λ©μλ | κ°λ³ κ°μ²΄μ λμμ μ μ |
ν΄λμ€ λ©μλ (@classmethod) | ν΄λμ€ λ³μλ₯Ό λ³κ²½ν λ μ¬μ© |
μ μ λ©μλ (@staticmethod) | λ 립μ μΈ κΈ°λ₯μ μννλ ν¨μ |
μμ (Inheritance) | κΈ°μ‘΄ ν΄λμ€λ₯Ό νμ₯νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μ μ |
λ©μλ μ€λ²λΌμ΄λ© | λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μ |