전산/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의 파라미터로 들어간다.