객체: 실생활에서의 일종의 물건! 속성과 행동을 가진다. ex) 의자라는 객체는 색상, 움직임 등의 특성을 가진다.
클래스는 설계도! 객체(인스턴스)는 구현한 것이다! 붕어빵 틀과 붕어빵으로 생각하면 쉽다. ㅎㅋ
여기서 잠깐! 변수명과 함수명을 짓는 방식
1. snakecase: 변수에 사용! 띄어쓰기 부분에 사용, 소문자를 사용함.
2. CamelCase: 클래스명에 사용! 띄어쓰기 부분에 대문자를 사용함.
! __init__ 함수는 행동이 아닌 속성을 정의하는 객체 초기화 예약 함수
'__' 두개는 특수한 예약 함수나 변수, 그리고 함수명 변경(맹글링)으로 사용한다.
먼저 객체(object) 이름 선언과 함께 초기값을 입력한다.
method(action) 추가는 기존 함수와 방시깅 같으나, self를 추가해야지 클래스의 함수로 인정된다.
class SoccerPlayer(object):
def __init__(self, name : str, position : str, back_number : int):
self.name = name
self.position = position
self.back_number = back_number
def __str__(self):
return "Hello, My name is %s. My back number is %d" % ₩ (self.name, self.back_number)
def __add__(self, other):
return self.name, other.name
sonny = SoccerPlayer("son", "FW", 7)
park = SoccerPlayer("park", "WF", 13)
print(park)
# 원래라면 주소가 나오지만, __str__ 함수로 인해 내용이 출력된다.
# Hello, My name is park. My back number is 13.
print(sonny + park)
# sonpark
객체 지향 언어는 실제 세상을 모델링하기에 필요한 특성들을 가진다!
1. Inheritance(상속)
class Person(obeject):
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def about_me(self)>:
print("저의 이름은 ", self.name, "이구요, 제 나이는 ", str(self.age), "살 입니다.")
class Employee(Person):
def __init__(self, name, age, gender, salary, hire_date):
super().__init(name, age, gender)
self.salary = salary
self.hire_date = hire_date
def about_me(self):
super().about_me()
print("제 급여는 ", self.salary, "원 입니다.")
myPerson = Person("John", 34, "Male")
myPerson.about_me()
# 저의 이름은 John 이구요, 제 나이는 34살 입니다.
myEmployee = Employee("Daeho", 34, "Male", 300000, "2022/03/01")
myEmployee.abount_me()
# 저의 이름은 Daeho 이구요, 제 나이는 34살 입니다.
# 제 급여는 300000원 입니다.
2. Polymorphism(다형성)
**3. Visibility(가시성)
@function_name 을 쓰게 되면, 아래의 함수가 해당 함수의 인자로 들어가는 것이다.
<예시>
def star(func):
def inner(*args, **kwargs):
print("*" * 30)
func(*args, **kwargs)
print("*" * 30)
return inner
@star
def printer(msg):
print(msg)
printer("Hello")
<결과>
Hello