Python OOP

soominlee·2022년 8월 2일
0

🐍 Python

목록 보기
7/14

*해당 게시글은 <NAVER boostcourse> 에서 수강한 강의를 바탕으로 정리한 내용입니다.

OOP characteristics

: Object-Oriented Programming
1. Inheritance : 상속
2. Polymorphism : 다형성
3. Visibility : 가시성

상속 Inheritance

  • 부모 클래스로부터 속성과 Method를 물려받은 자식 클래스를 생성하는 것
class Person(object):
	def __init__(self, name, age, gender):
    	self.name = name
        self.age =age
        self.gender = gender
        
    def about_me(self):
    	print(f"my name is {self.name} and my age is {self.age}. ")


class Employee(Person): # Person class 상속
	def __init__(self., age, name, gender, salary, hire_date):
    	super().__init__(name, age, gender)	# 부모 객체를 사용한다. 
        self.salary = salary
        self.hire_date = hire_date 
        
    def do_work(self):
    	print("work hard")
    
    def about_me(self): # Person class 함수 재정의
    	super().about_me()
        print(f"my salary is {self.salary} and my hire date is {self.hire_date}.") 
        

다형성 Polymorphism

  • 같은 method의 내부 로직을 다르게 작성하는 것
  • Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모 클래스를 상속한 클래스에서 주로 발생함
  • 부모 클래스에서 다형성을 가진 method를 선언하고 싶을 때 NotImplementedError 를 발생시킴으로써 자식 클래스에서 내부 로직을 다르게 작성하도록 한다.

가시성 Visibility

  • 객체의 정보를 볼 수 있는 레벨을 조정하는 것
  • Naming Mangling : 클래스 외부에서 객체의 속성에 접근할 수 없도록 클래스 명 앞에 __ 를 추가하여 선언함
    * 위와 같이 mangling된 클래스의 속성은 외부에서 접근할 때 원래 이름이 아닌 _클래스명__속성명 과 같이 변경된 이름으로 호출해함
Class Product():
	pass
    
Class Inventory():
	def __init__(self):
    	self.__items = []	# 클래스 외부에서 접근 불가
    
    def add_item(self, product):
    	if type(product) == Product
    		self.__items.append(product)
        else:
        	raise ValueError('product is not Produt object')

inventory1 = Inventory()

p1 = Product()
p2 = Product()

inventory.add_item(p1)
inventory.add_item(p2)

print(inventory.__items) # AttributeError 
  • @property 데코레이터를 사용해서 외부로부터 숨겨진 변수에 접근이 가능하도록 할 수 있다.
Class Product():
	pass
    
Class Inventory():
	def __init__(self):
    	self.__items = []	# 클래스 외부에서 접근 불가
    
    def add_item(self, product):
    	if type(product) == Product
    		self.__items.append(product)
        else:
        	raise ValueError('product is not Produt object')
	
    @property
    def show_item(self, index):
    	return self.__items[index]
    
inventory1 = Inventory()

p1 = Product()
p2 = Product()

inventory.add_item(p1)
inventory.add_item(p2)

inventory.show_item(1) 
> p2
profile
Soominlee

0개의 댓글