- class 만드는 법을 순서대로 해본다.
- class 내부에서는 self를 붙여줘야 한다.
- class 설계 하다가 지금 당장 설계 못하는 부분은 pass로 우선 넣고 나중에 추가 해준다.
- 예시: def disp(self): pass
#1 만들어보기
순서
- class 선언
- class 내부에서 def __init__(self) 선언 (초기화, 즉 초깃값 설정)
- self: class 자기 자신을 의미
- class로 instance 만들기 (p = Person())
예시
class Person: def __init__(self): self.name = 'ddaeng' // 초기화 self.age = 20 p = Person() print(p.name) // 'ddaeng' print(p.age) // 20
#2 여러 개의 인스턴스 만들기
순서
- def __init__에서 name, age 매개변수 선언
- self.name, self.age는 name, age 매개변수 받아 주는 것으로 변경
- p1, p2 등 여러 개의 instance 선언
- 선언 할 때는 초깃값을 설정해준다.
예시
class Person: def __init__(self, name, age): self.name = name self.age = age p1 = Person('jake', 33) p2 = Person('tom', 21) print(p1.name) // 'jake' print(p2.age) // 21
#3 class 내부에서 함수(메소드) 만들어보기
순서
- class 내부에 함수(메소드) 추가하기
- class 내부의 메소드를 만들 때는 def abc(self)와 같이 self 넣어주기
- class 밖에서 인스턴스 만들기
- 인스턴스 메소드 호출하기
예시
class Person: def __init__(self, name, age): self.name = name self.age = age def disp(self): print(self.name, self.age) p1 = Person('jake', 33) p2 = Person('tom', 21) p1.disp() // 'jake', 33 p2.disp() // 'tom', 21
#4 class 내부에서만 생성자에 접근하도록 하기
- 목적: 클래스 안에서만 접근 가능하도록 해서 보안을 유지한다.
순서
- 생성자 앞에 __를 붙인다.
- 메소드에서 __eng로 접근한다.
예시
class Person: def __init__(self): self.__name = 'ddaeng' def getName(self): print(self.__name) def setName(self, name): self.__name = name p1 = Person() p1.setName('great') p1.getName() // 'great'
- 실제로 getter, setter 함수 형태로 많이 사용함
참고
- getter에 @property / setter에 @name.setter 데코레이터를 붙여주면 클래스 밖에서 name 으로 접근 가능 + 밖에서 접근할 때 getter / setter method 통해서 접근하게 된다.
class Person: def __init__(self): self.__name = 'ddaeng' @property def name(self): print(self.__name) @name.setter def name(self, name): self.__name = name p1 = Person() p1.name = 'dong'
- setter와 getter : https://wikidocs.net/21053
06_Setter 와 Getter
파이썬에서 class을 지원하기 때문에 setter/getter 또한 지원한다. 기본적으로 다음과 같이 구현할 수 있다. 메서드에 set 혹은 get을 붙이면 된다. `` ...
wikidocs.net
- [파이썬] property 사용법 (함수/데코레이터) : https://www.daleseo.com/python-property/
[파이썬] property 사용법 (함수/데코레이터)
Engineering Blog by Dale Seo
www.daleseo.com
#6 class 상속 사용하기 - 생성자 상속
순서
- Person 클래스 만들기
- Person 클래스를 상속하는 Korean 클래스 만들기
- Korean 클래스 안에서는 부모의 __init__ 상속 받기
- Korean 클래스 안에서 부모의 __init__ 외에 추가 생성자 만들기
- 클래스 밖에서 인스턴스 만들기
- 인스턴스 메소드 실행 해보기
예시
class Person: def __init__(self): self.name = 'great' self.age = 20 class Korean: def __init__(self): super().__init__() self.lang = 'korean' class American: def __init__(self): super().__init() self.lang = 'english' p1=Person() print(p1.name, p1.age) // 'great', 20 k1=Korean() print(k1.name, k1.age, k1.lang) // 'great', 20, 'korean' a1=American() print(a1.name, a1.age, a1.lang) // 'great', 20, 'english'
#7 class 상속 사용하기 - 메소드 상속
순서
- Person 클래스 만들기
- Person 클래스를 상속하는 Korean 클래스 만들기
- Person 클래스에서 method 만들기
- Korean 클래스에서 Person 클래스의 method 상속 받아서 method 만들기
- 클래스 밖에서 인스턴스 만들기
- 인스턴스 메소드 실행 해보기
예시
class Person: def __init__(self): self.name = 'great' self.age = 20 def say(self): print() class Korean: def __init__(self): super().__init__() self.lang = 'korean' def say(self): print('안녕하세요') class American: def __init__(self): super().__init() self.lang = 'english' def say(self): print('hello') p1=Person() p1.say() k1=Korean() k1.say() // '안녕하세요' a1=American() a1.say() // 'hello'
#8 class 상속과 다형성
순서
- 실행 할 main 함수 만들기
- main 함수 선언하기
- 부모가 될 Point class 만들기
- 자식이 될 Rect, Circle class 만들기 (Point class 상속 받아, 필요한 생성자와 함수 추가)
예시
class Point: def __init__(self): self.x = int(input('x=')) self.y = int(input('y=')) def disp(self): pass class Rect(Point): def __init__(self): super().__init__() self.w = int(input('w=')) # width self.h = int(input('h=')) # height def disp(self): print('사각형', self.x, self.y, self.w, self.h) class Circle(Point): def __init__(self): super().__init__() self.r = int(input('r=')) # radius def disp(self): print('원', self.x, self.y, self.r) def main(): li=list() while True: s=input('1-사각형, 2-원, 3-조회, 4-종료: ') if s == '1': li.append(Rect()) if s == '2': li.append(Circle()) if s == '3': for i in li: i.disp() if s == '4': break print('프로그램을 종료합니다.') main()
#9 class 변수와 instance 변수
- class 변수: 클래스 단위로 li = [] 관리(self를 안붙이고 선언). 인스턴스 생성 마다 초기화 X
- class명.li로 접근
- instance 변수: 각 인스턴스 별로 self.li = [] 초기화(self를 붙이고 선언). 인스턴스 생성 마다 초기화 O
- self.li로 접근
예시
# 인스턴스 변수: 각 인스턴스 별로 self.li = [] 초기화(self를 붙이고 선언). 인스턴스 생성 마다 초기화 O class Person: def __init__(self, sp): self.li = [] # 인스턴스 변수 self.li.append(sp) def disp(self): print(self.li) p1=Person('milk') p1.disp() # ['milk'] p2=Person('coke') p2.disp() # ['coke'] p3=Person('juice') p3.disp() # ['juice'] # 클래스 변수 : 클래스 단위로 li = [] 관리(self를 안붙이고 선언). 인스턴스 생성 마다 초기화 X class Person: li = [] # 클래스 변수 def __init__(self, sp): Person.li.append(sp) # Person class 내의 li에 접근 def disp(self): print(Person.li) p1=Person('milk') p1.disp() # ['milk'] p2=Person('coke') p2.disp() # ['milk', 'coke'] p3=Person('juice') p3.disp() # ['milk', 'coke', 'juice']
- 출처: https://youtube.com/playlist?list=PLz2iXe7EqJOOt1r8Io-BFAV-SHFWFKYtN 를 요약 정리 했습니다.
'Python' 카테고리의 다른 글
python에서 yaml 파일 사용하기 (0) | 2022.01.18 |
---|---|
vscode에서 모듈 import 안될 때 (0) | 2021.08.20 |
댓글