반응형
속성은 같으나 데이터만 다른 경우
- class: 쿠키 틀
- instance/object: 쿠키
- method: 클래스 안의 함수
- constructor method: 초기화 목적으로 사용되는 메써드
- inheritance: 코드를 재사용 가능한 조각으로 나눈다.
- child class가 parent class의 속성을 갖는다.
1. Encapsulation(캡슐화)
데이터와 데이터를 활용하는 함수를 하나의 캡슐(class) 안에 넣는다.
어떻게 클래스 정보에 접근/수정하는지 결정하는 권한을 제공한다.
2. Inheritance(상속)
클래스를 확장(extension)한다.
여러 class에서 반복적인 부분을 추상화한다.
3. Abstraction(추상화)
구현 세부정보를 숨기는 일반 인터페이스를 지정하는 행위
(act of specifying a general interface hiding implementation details)
e.x. 핸들과 페달로 운전이 가능. 자동차 내부의 구현 세부정보는 노출 X
4. Polymorphism(다형성)
method overriding: 같은 메써드를 쓰지만 다르게 구현
class Human:
def __init__(self, name):
self.name = name
def say_hello(self):
print(f"hello my name is {self.name}")
class Fan(Human):
def __init__(self, name, fav_team):
self.fav_team = fav_team
nico_fan = Fan("nico_fan", "dontknow")
nico_fan.say_hello()
#>> Human을 상속받았지만 Human을 initialize하지 않은 상태
#>> 'name'에서 에러가 발생
class Human:
def __init__(self, name):
self.name = name
def say_hello(self):
print(f"hello my name is {self.name}")
class Fan(Human):
def __init__(self, name, fav_team):
super().__init__(name)
self.fav_team = fav_team
nico_fan = Fan("nico_fan", "dontknow")
nico_fan.say_hello()
#>> super(): Human 클래스에 접근할 수 있도록 한다
#>> super().__init__(name): Human을 initialize한다(Human의 init 메써드를 호출해야)
class Dog:
def woof(self):
print("woof woof")
class Beagle(Dog):
def jump(self):
print("jump")
beagle = Beagle()
beagle.woof()
beagle.jump()
#>> woof woof
#>> jump
init 메써드가 필수적인 것은 아니다
class Dog:
def woof(self):
print("woof woof")
class Beagle(Dog):
def jump(self):
super().woof()
print("jump")
beagle = Beagle()
beagle.jump()
#>> woof woof
#>> jump
부모의 woof 메써드를 child의 jump 메써드에 넣어서 같은 결과를 출력
class Dog:
def __init__(self, name):
self.name = name
jia = Dog("jia")
print(jia)
#>> <__main__.Dog object at 0x7d688137bac0>
object가 어디에 있는지를 출력한다
class Dog:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Dog: {self.name}"
jia = Dog("jia")
print(jia)
#>> Dog: jia
클래스가 문자열로 보이도록 커스텀했다
jia 객체는 내부적으로 str 메서드를 실행
class Dog:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Dog: {self.name}"
jia = Dog("jia")
print(dir(jia))
#>> ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']
dir: 클래스의 속성과 메서드를 보여줌
클래스의 내부 구조를 확인할 수 있다
반응형
'airbnb clone coding' 카테고리의 다른 글
[Django] 5_1. Users App: Customize (0) | 2024.07.11 |
---|---|
[Django] 4_2. Django Apps: Admin + Documentation (0) | 2024.07.11 |
[Django] 4_1. Django Apps: Models + Migrations (0) | 2024.07.11 |
[Django] 3. Django Basics (0) | 2024.07.10 |
[Django] 1. Intro: set up (0) | 2024.07.09 |