전산/Python

[Python] Class

만두쓰 2023. 1. 14. 17:02

__ 의미

  • 특수한 예약 함수나 함수명 변경(맨들링)으로 사용
  • ex) __main__, __add__, __str__, __eq__ 
class SoccerPlayer(object):
	def __str__(self):
		return "Hello, My name is %s. I play in %s in center " % (self.name, self.position)
        
jinhyun = SoccerPlayer("Jinhyun", "MF", 10)
print(jinhyun)

__str__없이 class의 object를 print 하면 안됨. __str__을 사용하면 가능.

 

상속

  • super().function() 이렇게 사용
class Person(object): # 부모 클래스 Person 선언
	def __init__(self, name, age, gender):
		self.name = name
		self.age = age
		self.gender = gender
	def about_me(self): # Method 선언
		print("저의 이름은 ", self.name, "이구요, 제 나이는 ", str(self.age), "살입니다.")
        
class Employee(Person): # 부모 클래스 Person으로 부터 상속
	def __init__(self, name, age, gender, salary, hire_date):
		super().__init__(name, age, gender) # 부모객체 사용
		self.salary = salary
		self.hire_date = hire_date # 속성값 추가
	def do_work(self): # 새로운 메서드 추가
		print("열심히 일을 합니다.")
	def about_me(self): # 부모 클래스 함수 재정의
		super().about_me() # 부모 클래스 함수 사용
		print("제 급여는 ", self.salary, "원 이구요, 제 입사일은 ", self.hire_date, " 입니다.")

 

Property

  • property decorator로 숨겨진 변수를 반환하게 해줌
  • 함수를 변수처럼 호출 가능
class Inventory(object):
	def __init__(self):
		self.__items = []

	@property
	def items(self):
		return self.__items

my_inventory = Inventory()
print(my_inventory.get_number_of_items())

items = my_inventory.items

 

일급 함수

  • 파이썬의 함수는 일급 함수
  • 일급 함수는 함수를 변수로 사용이 가능
  • 파라미터로 전달이 가능
  • 리턴 값으로 설정이 가능
def square(x):
	return x * x

f = square
f(5)
def print_msg(msg):
	def printer():
		print(msg)
		return printer

another = print_msg("Hello, Python")
another()

 

Decorator

  • '@'를 사용하여 함수를 꾸며주는 기능
  • 아래 예제를 보면, printer함수가 star 함수의 parameter로 들어간다. 
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
******************************

 

  • decorator에 parameter를 넣을 수도 있음
def generate_power(exponent):
	def wrapper(f):
		def inner(*args):
			result = f(*args)
			return exponent**result
		return inner
	return wrapper

@generate_power(2)
def raise_two(n):
	return n**2
    
## generator_power의 파라미터인 2는 exponent으로 들어가고,
## raise_two 함수는 generator_power 함수의 내부 함수인 wrapper의 파라미터로 들어간다.

 

출처 : https://www.boostcourse.org/ai100/lecture/739171