클래스
2022. 10. 9. 12:26ㆍDev.Program/Python & R
728x90
책 183p
======== test5.py
< 클래스 >
원래 인터프리터 언어에는 클래스가 없지만 파이썬에는 조금 들어있다(많이는 없음)
< 기본 문법 >
class 클래스이름: 주제 변수1 주제 변수2 주제 처리 함수1 주제 처리 함수2 # 객체 생성 # 변수 = 클래스 이름() |
class Simple: pass # 클래스 형태만 만들어짐 |
- pass 적으면 클래스 형태만 만들어짐
class Simple: s="변수" def prn(self): print("함수정의") def sum2(self, a, b): return a+b |
- 클래스 내의 함수 self 자동으로 붙음 (그냥 함수와 구분)
> 객체 생성해서 함수호출해보기
a = Simple() # 객체생성 print(a.s) # 변수호출 a.prn() # 함수호출 print(a.sum2(1, 2)) # 함수호출 |
< 초기값 설정 >
- 내장함수 init()
- 클래스 안에 미리 만들어져있는 내장함수를 통해 초기값 설정
# 초기값 설정 class Person: # 초기값 함수(클래스 안에 있는 내장함수) def __init__(self, name, age): # 값을 받는 매개 변수 # self.name 인스턴스 멤버변수(객체를 생성해야 사용할 수 있는 변수/함수) self.name = name self.age = age def intro(self): print("이름 :", self.name, "나이 :", self.age) p = Person("지니", 18) p.intro() |
# 클래스 FourCal2 초기값 a, b 받아서 sum함수 a,b 더한값 리턴 # sub함수 a,b 뺀값 리턴, mul함수 a,b 곱한값 리턴 # div함수 a,b 나눈값 리턴 class FourCal2: def __init__(self, a, b): self.a = a self.b = b def sum(self): return self.a + self.b def sub(self): return self.a - self.b def mul(self): return self.a * self.b def div(self): return self.a / self.b # 객체 생성 메서드 호출 fc = FourCal2(30, 20) print(fc.sum()) print(fc.sub()) print(fc.mul()) print(fc.div()) |
< 클래스 상속 >
# 클래스 상속 class Parent: def parent_prn(self): print("부모클래스 prn()함수") class Child(Parent): # Parent 상속 def child_prn(self): print("자식클래스 prn()함수") |
- 상속받을 땐 부모클래스를 괄호안에 넣는다
# Child 객체생성 parent_prn() child_prn() 메서드 호출 c = Child() c.parent_prn() c.child_prn() |
class Child(Parent): # Parent 상속 def child_prn(self): print("자식클래스 prn()함수") # 메서드 오버라이딩: 부모메서드 재정의 def parent_prn(self): print("메서드 오버라이딩!") # Child 객체생성 parent_prn() child_prn() 메서드 호출 c = Child() c.parent_prn() c.child_prn() |
- 메서드 오버라이딩 시 출력결과 달라짐
# Bicycle 클래스 # 초기값 color 받아 멤버변수 color 변수에 저장 # move 함수 출력 color class Bicycle: def __init__(self, color): self.color = color def move(self, speed): print("자전거 색 :", self.color, "자전거 속도 :", speed) class FoldingBicycle(Bicycle): def fold(self): print(self.color, "색 자전거 접기") f = FoldingBicycle("노랑") # 상속받았을 땐 부모초기값 입력 필수! f.move(30) f.fold() |
> 파이썬은 다중 상속이 가능
< 클래스 안에 내장함수 >
# 클래스 안에 내장함수 __add__ # 부모클래스 + 자식클래스(add 함수호출) # __sub__ # 부모클래스 - 자식클래스(sub 함수호출) |
# 부모클래스 HousePark # 멤버변수 lastname = "박" # 초기값 name 받아서 self.fullname = self.lastname + name # 함수정의 travel(where) 출력 self.fullname 이 where 여행가다 class HousePark: lastname = "박" def __init__(self, name): self.fullname = self.lastname + name def travel(self, where): print(self.fullname, "이", where, "여행가다") # 자식클래스 HouseKim 상속 HousePark # 멤버변수 lastname = "김" # 함수 재정의 travel(where, day) 출력 self.fullname 이 where에 day일 여행가다 class HouseKim(HousePark): lastname = "김" def travel(self, where, day): # 부모메서드 호출 super().travel("강원도") print(self.fullname, "이", where, "에", day, "일 여행가다") # HouseKim 객체생성 # travel() 함수 호출 hk = HouseKim("멍멍") hk.travel("지니네", 30) |
class HousePark: lastname = "박" def __init__(self, name): self.fullname = self.lastname + name def travel(self, where): print(self.fullname, "이", where, "여행가다") def __add__(self, other): # other 다른클래스(자식클래스) print(self.fullname, "와", other.fullname, "여행지에서 만나다") def __sub__(self, other): print(self.fullname, "와", other.fullname, "여행지에서 헤어지다") class HouseKim(HousePark): lastname = "김" def travel(self, where, day): # 부모메서드 호출 super().travel("강원도") print(self.fullname, "이", where, "에", day, "일 여행가다") # 부모클래스 HousePark 객체생성 hp = HousePark("야옹") # HouseKim 객체생성 # travel() 함수 호출 hk = HouseKim("멍멍") hk.travel("지니네", 30) # __add__ 함수호출 hp + hk # __sub__ 함수호출 hp - hk |
- 추가 부분!
728x90
'Dev.Program > Python & R' 카테고리의 다른 글
함수 Import 방법 / 외장함수 (0) | 2022.10.09 |
---|---|
다중 상속 / 함수 / 예외처리 / 파일 읽고 쓰기 (0) | 2022.10.09 |
반복문(while,for) / 일반함수 / 람다 / map (1) | 2022.10.08 |
출력 / 리스트 / 튜플 / 딕셔너리 (0) | 2022.10.08 |
주석 / 변수 / 타입 / 연산자 (0) | 2022.10.08 |