상속 : Inheritance
부모클래스로부터 속성과 method를 자식클래스가 물려받게 만드는 것
class Person(object):
def __init__(self, name,age):
self.name=name
self.age=age
def about_me(self):
print("이름은 {}, 나이는 {}입니다.".format(self.name,self.age))
#person이라는 부모클래스를 korean이라는 클래스에 상속
class Korean(Person):
pass
k1=Korean("yo", 33)
print(k1)
>>이름은 yo, 나이는 33입니다.
super() : 자기 자신의 부모 클래스를 사용
부모 클래스가 가진 속성을 불러낼 수 있다.
class Employee(Person):
def __init__(self, name, age, salary, hire_date):
super().__init__(name,age)
self.salary=salary
self.hire_date=hire_date
def about_me(self):
super().about_me()
print("급여는 {}원, 입사일은 {}입니다.".format(self.salary, self.hire_date)
이렇게 구현할 수 있다.
e1=Employee("ai", 22, 300200,"20111111")
e1.about_me()
>>이름은 ai, 나이는 22입니다.
>>급여는 300200원, 입사일은 20111111입니다.
부모 클래스의 about me와 employee(자식 클래스)의 about me가 둘 다 프린트 된다.
다형성 : Polymorphism
같은 이름 메소드의 내부 로직을 다르게 작성
상속할 때 발생
같은 draw라는 이름의 행동이지만 어느 클래스냐에 따라 원이 그려지기도 하고 네모가 그려지기도 함
class Animal:
def __init(self,name):
self.name=name
def talk(self):
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return "Meow"
class Dog(Animal):
def talk(self):
return "Woof!"
animal이라는 부모클래스를 상속받은 cat과 dog 클래스에서 각각에 맞게 talk 메소드를 다시 정의해서 사용한다.
하는 행동이 비슷하기에 메소드 이름은 같게끔하고, 세부 내용만 다르게 할 때 사용한다.
가시성 : Visibility
필요 없는 정보에는 접근하지 않게 레벨을 조절하는 것
소스를 보호하는 역할도 있다.
캡슐화/정보은닉(Encapsulation, information hiding) : 클래스 간의 간섭이나 정보공유를 최소화
개념적으로 정보들을 분리
class Product(object):
pass
class Inventory(object):
def __init__(self):
self.__items=[]
inventory에서 product items는 직접 접근이 불가
private 변수
'__item' 처럼 이렇게 변수 앞에 언더바를 2개 두면 타객체가 접근하지 못한다.
마음대로 다른 객체를 추가하지 못하게 막을 수 있다.
맨글링이라서 원천 차단은 아닌데 그렇게 보이게 한다.
property decorator
@property
내부에서는 접근되고, 외부에서는 접근하지 못함
class Inventory(object):
def __init__(self):
self.__items= []
@property
def items(self):
return self.__items
이렇게 코드를 하고
'객체.items' 와 같이 접근하면 접근 된다.
Reference: 부스트캠프 AI Tech 3기 Pre-Course-Python Object Oriented Programming
'개발 > Python' 카테고리의 다른 글
부스트캠프 AI Tech 3기 Pre-Course [3] Module and Project (0) | 2021.12.07 |
---|---|
부스트캠프 AI Tech 3기 Pre-Course [2]-3 decorate,일급객체, inner function (0) | 2021.12.07 |
부스트캠프 AI Tech 3기 Pre-Course [2]-1 객체 지향 언어로써의 파이썬 : Python OOP(Object Oriented Programming) (0) | 2021.12.06 |
[Python] 함수병 변경 (맹글링:mangling), __ 의미, 언더바(under bar) 2개 (0) | 2021.12.06 |
[Python] naming rule (0) | 2021.12.06 |