반응형
nico = {
"name": "Nico",
"XP": 1000,
"team": "Team X",
}
def introduce_player(player):
name = player["name"]
team = player["team"]
print(f"My name is {name} and I play for {team}.")
introduce_player(nico)
#>> My name is Nico and I play for Team X.
introduce_player 함수는 nico를 필요로 하지만
이 상태에서는 introduce_player 안에 아무거나 넣을 수 있다
ex. introduce_player(1234)도 입력할 수 있음
두 데이터가 연결되어있지만 아무런 제약없이 마음대로 날라다니고(?) 있다
OOP: 필요한 구조와 규칙을 제공한다
class: 입력 데이터를 정의하고, 그 데이터를 기반으로 동작하는 함수를 정의하는 것을 도와준다
class Player:
def __init__(self, name, xp, team):
self.name = name
self.xp = xp
self.team = team
def introduce_player(self):
print(f"My name is {self.name} and I play for {self.team}.")
nico = Player(name="Nico", xp=1500, team="X")
nico.introduce_player()
#>> My name is Nico and I play for X.
Method
method: class 안의 함수. method의 첫번째 argument는 무조건 self
__init__() method: class의 기본 값을 세팅
class Puppy:
def __init__(self):
self.name = "Ruffus"
self.age = 0.1
self.breed = "Beagle"
ruffus = Puppy()
# ruffus는 Puppy의 종류라고 정의
print(ruffus.name, ruffus.age, ruffus.breed)
#>> Ruffus 0.1 Beagle
class Puppy:
def __init__(self, name, breed): # 이제 name, breed 두 개의 argument를 필수로 입력해야
self.name = name
self.age = 0.1
self.breed = breed
def __str__(self):
return f"{self.breed} puppy named {self.name}."
# init 메써드에서 데이터를 정의하고, str 메서드에서 해당 데이터에 접근
ruffus = Puppy(name="Ruffus", breed="Beagle")
bibi = Puppy(name="Bibi", breed="Dalmatian")
# ruffus, bibi는 Puppy class의 인스턴스(object)
print(ruffus.breed, bibi.breed)
#>> Beagle Dalmatian
print(ruffus, bibi)
#>> Beagle puppy named Ruffus. Dalmatian puppy named Bibi.
class Puppy:
def __init__(self, name, breed): # 이제 name, breed 두 개의 argument를 필수로 입력해야
self.name = name
self.age = 0.1
self.breed = breed
def __str__(self):
return f"{self.breed} puppy named {self.name}."
def woof_woof(self):
print("woof woof")
def introduce(self):
self.woof_woof()
print(f"My name is {self.name} and I amd a baby {self.breed}.")
# class 안의 method는 다른 method를 호출할 수 있다
ruffus = Puppy(name="Ruffus", breed="Beagle")
bibi = Puppy(name="Bibi", breed="Dalmatian")
ruffus.introduce()
bibi.introduce()
#>> woof woof
#>> My name is Ruffus and I amd a baby Beagle.
#>> woof woof
#>> My name is Bibi and I amd a baby Dalmatian.
class 안의 method는 다른 method를 호출할 수 있다
Inheritance
class Dog:
def __init__(self, name, age, breed):
self.name = name
self.age = age
self.breed = breed
# 클래스들의 일반적인 속성들을 분리하여 부모 클래스를 만들었다
class GuardDog(Dog):
def rrrrr(self):
print("stay away!")
class Puppy(Dog):
def woof_woof(self):
print("woof woof")
bibi = GuardDog(name="Bibi", age=5, breed="Dalmatian")
ruffus = Puppy(name="Ruffus", age=0.1, breed="Beagle")
bibi.rrrrr()
ruffus.woof_woof()
#>> stay away!
#>> woof woof
별도의 초기화 과정이 필요없다면 하위 클래스에서 __init__ 메서드를 정의하지 않아도 된다
class Dog:
def __init__(self, name, age, breed):
self.name = name
self.age = age
self.breed = breed
# 클래스들의 일반적인 속성들을 분리하여 부모 클래스를 만들었다
def sleep(self):
print("zzzz")
class GuardDog(Dog):
def __init__(self, name, age, breed):
super().__init__(
name,
5,
breed,
)
self.aggressive = True # GuardDog만의 속성을 정의
def rrrrr(self):
print("stay away!")
class Puppy(Dog):
def __init__(self, name, age, breed):
super().__init__(
name,
0.1,
breed,
)
self.spoiled = True # Puppy만의 속성을 정의
def woof_woof(self):
print("woof woof")
bibi = GuardDog(name="Bibi", age=5, breed="Dalmatian")
ruffus = Puppy(name="Ruffus", age=0.1, breed="Beagle")
bibi.rrrrr()
ruffus.woof_woof()
#>> stay away!
#>> woof woof
bibi.sleep()
#>> zzzz
# bibi는 부모 클래스의 메서드를 그대로 받음
GuardDog, Puppy 만의 고유의 속성이 필요하다면, 해당 하위클래스(GuardDog, Puppy)에서 init 메서드를 재정의한다
반응형
'Python' 카테고리의 다른 글
[Python] Flask basics (0) | 2024.07.18 |
---|