객체 지향 프로그래밍 언어 (oop)
실제 세상을 모델링한 것
일련의 순서가 아닌, 객체(주체)와 객체의 행동, 데이터를 중심으로 작성
객체 : 일종의 물건. 속성과 행동을 가짐
1) 속성 : 변수
2) 행동 : 함수
기존의 코드를 재사용
1) 클래스(CLASS) : 설계도
2) 인스턴스(instance) : 구현체, 우리가 사용하는 것
class Student(object):
def __init__(self, name :str, number: int):
self.name =name
self.number= number
def change_number(self, number):
print("번호 변경")
self.number =number
class 클래스이름(객체명):
속성 추가는 init, self로..!!
init은 객체를 초기화하는 예약함수
![]
1) 상속(Inheritance)
2) 다형성 (polymorphism)
3) 시각성 (visibility)
#부모 클래스
class Parent:
def __init__ (self, name, age):
self.name=name
self.age= age
#자식 클래스
class Child(Parent):
def __init__(self,name, age):
super().__init__(name, age)
self.name=name
self.age= age
class Cat:
def talk():
print("야옹")
class Dog:
def talk():
print("멍멍")
캡슐화(Encapsulation)
1) private 변수(.__)로 다른 사람들이 쉽게 접속할 수 없게 함.
sel.__items=[]
2) 데코레이터(property decorator)를 추가하여 내부에서는 접근할 수 있게끔 처리. 숨겨진 변수를 반환하게 해줌
```
Class
.
.
.
@property
def items(self):
return self.__items
.
.
.
items= My_bag.items # property decorator로 변수처럼 함수를 호출할 수 있다.
My_bag.items.append("a") # 추가할 수 있다.
```
def square(x):
return x*x
def cube(x):
return x*x*x
def formula(method, list): #함수를 parameter로 넣음
return [method(value) for value in list]
# list에서 value를 가져와 square와 cube함수를 적용
def A(datas):
def B():
prinT(datas)
B()
A("Hello World!")
많이 사용하는 방식
closures : 내재함수를 return값으로 반환
- tag_func
```
def A(datas):
def B():
prinT(datas)
return B
another= A("Hello World!")
anoter()
```
def trace(func): # 호출할 함수를 매개변수로 받음
def wrapper():
print(func.__name__, '함수 시작') # __name__으로 함수 이름 출력
func() # 매개변수로 받은 함수를 호출
print(func.__name__, '함수 끝')
return wrapper # wrapper 함수 반환
@trace # @데코레이터
def hello():
print('hello')
@trace # @데코레이터
def world():
print('world')
hello() # 함수를 그대로 호출
world() # 함수를 그대로 호출
(출처: https://dojang.io/mod/page/view.php?id=2427)